为什么收到FD_READ消息了,却读不到数据?

screen12 screen12 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我用的是TCP协议,非阻塞方式。客户端向服务端发送一个数据包,服务端的一个窗口会收到FD_READ消息,然后我用recv把数据收了。一切正确。

可是问题就在于:服务端数据收完以后(长度也和客户端发送的一样),却马上又收到一个FD_READ消息,而此时客户端并没有发送任何数据。

我用select检测了一个,居然结果还是:这个套接字,是可读的。但是用recv来收数据,却返回Socket_error,然后调用WSAGetlasterror(),返回WSAEWOULDBLOCK,这意味着,接收缓冲区无数据可收。

真是奇怪,客户端只发一个数据包,服务端也收了这个数据包,一切正确。可是服务端收完这个数据包以后,却又收到一个FD_READ消息,而客户端并没有。而且用select来检测,发现它是可读的。而真正收的话,又收不到数据,显示接收缓冲区空。

这是怎么回事?
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
screen12
网络编程 18,356 成员 64,161 内容