Why would every UDP packet involve one syscall when you can use sendmmsg(2) instead of sendmsg(2)? And similarly recvmmsg(2) instead of recvmsg(2).
EDIT: I found https://news.ycombinator.com/item?id=45387462 which is a way better discussion than what I wrote.