backend/udp: If either tun or udp get read optimistically repeat

This optimization bypasses poll() under continuous activity like
bulk transfers.  In simple dd | ncat tests this change eliminated
practically all poll() calls during the transfer, substituting them
with EAGAIN read()/recvfrom() calls at half the original poll()
occurrences.

The ctl fd is intentionally starved by this change, and an upper
bound could be placed on how long we do so by adding a simple
counter to break the inner loop if necessary.
So there was no starvation before as well so this has the same behavior as before minus the extra poll() calls. LGTM.