如何检测0长度UDP数据报的接收

Jum*_*ram 10 c sockets udp

我正在考虑编写/实现一个基于UDP的协议,该协议将使用零长度数据报作为"hello"消息.虽然我不希望发送零长度数据报有问题,但我不确定我能收到一个.

recvfrom返回读取的字节数,但0保留用于有序关闭.

read返回读取的字节数,但为EOF保留0.

选择 "将观看人物是否可以阅读".

如何检测零长度数据报的接收?

bdk*_*bdk 11

当调用recvfromTCP套接字时,如果收到FIN数据包(有序关闭),您将收到零字节读取.UDP没有有序关闭的概念,也没有数据从发送方传输到接收方以指示套接字被关闭.该协议是完全无状态的,并且每个接收的数据报都独立于接收者的观点.因此,我不知道任何场景,其中来自UDP套接字上的recvfrom的零字节返回码将由除了接收零长度数据报之外的任何东西引起.

  • 是的,`recvfrom()`如果收到0长度的数据包(至少在Windows上)将返回0.MSDN的文档尽可能多地说:( http://msdn.microsoft.com/en-us/library/ms740120.aspx)"对于UDP,如果收到的数据包不包含数据(空),则recvfrom函数函数的返回值为零." (2认同)
  • 在Linux上,如果recvfrom()收到零长度UDP数据报,则返回0. (2认同)