在Linux中,我可以使用ioctl
调用FIONREAD
来获取下一个UDP数据包的字节数。
这在OSX上不起作用,而是我必须使用getsockopt
调用SO_NREAD
来确定数据包的字节数。
有没有办法可以避免偷看或读入大缓冲区,然后在BSD平台下获得相同的结果?
答案 0 :(得分:2)
FIONREAD
适用于BSD。事实上,它就是它的来源。但它返回可以无阻塞地读取的总字节数,这可能不止一个数据报。
编辑您可以尝试使用MSG_PEEK | MSG_TRUNC并提供零缓冲区长度,如果不喜欢,则可以使用一个缓冲区长度。它应该给你真正的长度。