为什么收到FD_READ消息了,却读不到数据?
我用的是TCP协议,非阻塞方式。客户端向服务端发送一个数据包,服务端的一个窗口会收到FD_READ消息,然后我用recv把数据收了。一切正确。
可是问题就在于:服务端数据收完以后(长度也和客户端发送的一样),却马上又收到一个FD_READ消息,而此时客户端并没有发送任何数据。
我用select检测了一个,居然结果还是:这个套接字,是可读的。但是用recv来收数据,却返回Socket_error,然后调用WSAGetlasterror(),返回WSAEWOULDBLOCK,这意味着,接收缓冲区无数据可收。
真是奇怪,客户端只发一个数据包,服务端也收了这个数据包,一切正确。可是服务端收完这个数据包以后,却又收到一个FD_READ消息,而客户端并没有。而且用select来检测,发现它是可读的。而真正收的话,又收不到数据,显示接收缓冲区空。
这是怎么回事?