If no error occurs, this function returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. If an error occurs, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
1.socket已经"温和"关闭(使用shutdown或者设置linear属性)
2.对方发送一个空数据,也就是对方发送的数据长度为0。这时socket也就可以接收到的,并且recvfrom返回值为0。
我感到不明白的地方是,我的select总是返回可读,然后每次调用recvfrom都返回0,这样的包数以万计,导致我的程序在一段时间内CPU爆高。当然,我可以加sleep来缓解这个情况,但是,我想明白到底在什么情况下,会有那么多的0长度的包过来?本来我怀疑我的UDP套接字被别人关掉,然后刚好有人创建了一个TCP的套接字,分配到了这个fd,然后又关闭掉了,那么就可以解释为什么收到那么多的0长的包,因为套接字被关闭了嘛,但是,很郁闷的是,我打出了socket的类型居然还是UDP。
各位大侠,有没有遇到过这样收到大量的0长的包?
ip: 0.0.0.0
port: 0请高人帮忙解释一下,这代表什么意思?再次谢谢!