Reading a packet of data in one call

would I still be able to process multiple packets though?

I don't understand this question. The code you posted processes one packet per call to the function. Nothing I've suggested would alter that fact.