确定BSD平台中下一个UDP数据报的大小?

时间:2014-03-26 03:46:42

标签: sockets udp freebsd bsd

在Linux中,我可以使用ioctl调用FIONREAD来获取下一个UDP数据包的字节数。

这在OSX上不起作用,而是我必须使用getsockopt调用SO_NREAD来确定数据包的字节数。

有没有办法可以避免偷看或读入大缓冲区,然后在BSD平台下获得相同的结果?

1 个答案:

答案 0 :(得分:2)

FIONREAD适用于BSD。事实上,它就是它的来源。但它返回可以无阻塞地读取的总字节数,这可能不止一个数据报。

编辑您可以尝试使用MSG_PEEK | MSG_TRUNC并提供零缓冲区长度,如果不喜欢,则可以使用一个缓冲区长度。它应该给你真正的长度。