我只是清理了一些我们写过的代码并注意到对于udp套接字,0被视为连接关闭.
我很确定这是从等效的tcp版本移植相同的recv循环的结果.但这让我很奇怪.对于udp,可以recv返回0吗?在tcp上它发出信号,另一端已经关闭了连接.udp没有连接的概念所以它能返回0吗?如果可以的话,它的含义是什么?
注意:linux中的手册页不区分udp和tcp的返回码为零,这可能就是我们保留代码检查的原因.
cni*_*tar 13
udp没有连接的概念所以它能返回0吗?如果可以的话,它的意义是什么
这意味着收到了一个0长度的数据报.来自伟大的UNP:
写入长度为0的数据报是可以接受的.在UDP的情况下,这导致IP数据报包含IP报头(通常为IPv4的20字节和IPv6的40字节),8字节的UDP报头,没有数据. 这也意味着来自recvfrom的返回值0对于数据报协议是可接受的:这并不意味着对等体已关闭连接,因为TCP套接字上的读取返回值为0.由于UDP是无连接的,因此不存在关闭UDP连接的问题.