Error: 10004 一个封锁操作被对 WSACancelBlockingCall的调用中断 的解决

今天在进行网络通信调试的时候遇到一个错误:10004 一个封锁操作被对 WSACancelBlockingCall的调用中断。

错误的发生情况如下:

 

Server:

1. 一个线程启动一个socket1 在监听,接收到到来的client连接.

2. 同时,启动一个socket2作为client,连接到另外一个MessageServer上,今天因为MessageServer没有启动,所以这个socket2连接失败,调用了closesocket( socket2),但是socket2没有被置成INVALID_SOCKET。

3. 来了一个client连接到socket1 上,接收到一个包,然后调用了socket2打算发送一个消息到MessageServer上,而且,发送函数里面没有判断socket2是否已经连接上,就直接调用了send,这个调用当然是失败,失败后调用了closesocket(socket2),这个调用后监听线程里面的accept函数开始出错了,错误就是“10004 一个封锁操作被对 WSACancelBlockingCall的调用中断”。

 

最后的解决和发现:

socket1 是在socket2后被创建的。

socket2创建后,数值是5580,第一次被closesocket(socket2)后,socket1 开始创建,这个5580被socket1 获得,socket1 的值是5580。

后面socket1 接收到一个连接后,到了上面的第三步骤的时候,发送数据失败后,再次调用了closesocket(socket2),这个时候实际上是调用了closesocket(5580),所以导致了accept操作开始失败,出现错误10004.

 

后记:

切记切记:调用了closesocket后,一定要把里面的socket即时赋值成INVALID_SOCKET,更重要的是,不要对了一个socket进行多次的closesocket联系调用。

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部