Usando las API de socket UNIX en Linux, ¿hay alguna manera de garantizar que leo un paquete UDP y solo un paquete UDP? Actualmente estoy leyendo paquetes de un socket no bloqueante usando recvmsg, con un tamaño de buffer un poco más grande que el MTU de nuestra red interna. Esto debería garantizar que siempre pueda recibir el paquete UDP completo, pero no estoy seguro de poder garantizar que nunca recibiré más de un paquete por llamada recvmsg, si los paquetes son pequeños.¿puedo leer exactamente un paquete UDP de un socket?
Las páginas del manual recvmsg hacen referencia a la opción MSG_WAITALL, que intenta esperar hasta que se llene el búfer. No estamos usando esto, ¿eso implica que Recvmsg siempre regresará después de leer un datagrama? ¿Hay alguna manera de garantizar esto?
Idealmente me gustaría una solución cross-UNIX, pero si eso no existe ¿hay algo específico de Linux?
MSG_WAITALL es para sockets orientados a flujo: http://linux.die.net/man/3/recvmsg Como ya se ha respondido, recv/send() funciona usando datagramas completos para sockets orientados a datagramas. – Ioan