在Linux上使用UNIX套接字API,有什么方法可以保证我读取一个UDP数据包,并且只有一个UDP数据包?我正在使用recvmsg从非阻塞套接字读取数据包,其缓冲区大小比内部网络的MTU稍大。这应该确保我总是可以收到完整的UDP数据包,但是我不确定如果数据包很小,我不能保证每次recvmsg呼叫都不会收到多个数据包。我可以从套接字中读取一个UDP数据包吗?
recvmsg手册页引用MSG_WAITALL选项,该选项尝试等待,直到填充缓冲区。我们没有使用这个,那么这意味着recvmsg将在读取一个数据报后总是返回?有什么方法可以保证这一点?
理想情况下,我想要一个跨UNIX解决方案,但如果不存在,那么Linux是否有特定的解决方案?
MSG_WAITALL面向流的套接字:http://linux.die.net/man/3/recvmsg正如已经回答的那样,recv/send()使用整个数据报工作,用于面向数据报的套接字。 – Ioan 2010-03-30 19:57:44