ioctl
的{{1}}返回哪一个,下一个数据包的长度,或缓冲区中所有数据的长度?
假设有一个FIONREAD
服务器在客户端1的数据包之后接收来自客户端1的2个数据包和来自客户端2的另外2个数据包。
然后,UDP
的{{1}}的值是多少,
在这种情况下ioctl
会返回什么?
客户端1:v两个数据包
++ UDP服务器有4个数据包< - FIONREAD?
客户端2:^两个数据包
答案 0 :(得分:4)
FIONREAD (SIOCINQ) Gets a pointer to an integer as argument. Returns the size of the next pending datagram in the integer in bytes, or 0 when no datagram is pending. Warning: Using FIONREAD, it is impossible to distinguish the case where no datagram is pending from the case where the next pending datagram contains zero bytes of data. It is safer to use select(2), poll(2), or epoll(7) to distinguish these cases.
因此,您的问题的答案是: FIONREAD返回下一个(第一个)待处理数据报的大小。
答案 1 :(得分:2)
它与平台有关。
有关详细信息,请参阅here。
recvfrom()
的返回值是实际传输的字节数。