我只是清理了一些我们之前编写的代码,并注意到对于udp套接字,0被视为连接closures。
我很确定这是从相同的tcp版本移植相同的recv循环的结果。 但这让我感到惊讶。 可以recv返回0为udp? 在tcp它信号的另一端已经closures了连接。 udp没有连接的概念,所以它可以返回0? 如果可以的话,这是什么意思?
注意:在Linux的手册页不区分udp和tcp的返回码为零,这可能是为什么我们保持代码检查。
udp没有连接的概念,所以它可以返回0? 如果可以,那是什么意思
这意味着收到一个长度为0的数据报。 从伟大的联合国计划 :
写一个长度为0的数据报是可以接受的。 在UDP的情况下,这将产生包含IP报头的IP数据报(通常对于IPv4是20个字节,对于IPv6是40个字节),8个字节的UDP报头,并且没有数据。 这也意味着recvfrom的返回值0对于数据报协议是可以接受的 :这并不意味着对端已经关闭了连接,就像在TCP套接字上读取返回值0一样。 由于UDP是无连接的,所以不存在关闭UDP连接的问题。