recvfrom返回值为0有两种情况。
1.socket已经"温和"关闭(使用shutdown或者设置linear属性)
2.对方发送一个空数据,也就是对方发送的数据长度为0。这时socket也就可以接收到的,并且recvfrom返回值为0。现在如何区分这种情况呢?
1.socket已经"温和"关闭(使用shutdown或者设置linear属性)
2.对方发送一个空数据,也就是对方发送的数据长度为0。这时socket也就可以接收到的,并且recvfrom返回值为0。现在如何区分这种情况呢?
然后A再收到0byte,B收到之后,然后再次给A发送0byte。
以下从略
2。当socket graceful关闭,recvfrom接收时也会返回0。我想了一下,这样解决,可能有效。
如果recvfrom返回为0,我向对方发送一个长度不为0的数据,如果sendto返回值大于0,则此socket正常,否则说明socket已经关闭了。
如果没有关闭,你发了空数据报,对方是不是也要发空数据报来测试是否已经关闭?这样就无限循环下去了。