为什么一个阻塞的套接字关闭后会影响其它的套接字?

win98ddk 2002-12-28 01:43:29
我采用了一个阻塞模式套接字数组循环的发送数据,一旦发现某一个阻塞套接字发送数据失败,就把它关闭,但是其它的套接字也马上变得发送失败了,请问是怎么回事?
...全文
52 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovcecpp 2002-12-31
  • 打赏
  • 举报
回复
我给你发了一个短消息
sybsyb 2002-12-30
  • 打赏
  • 举报
回复
你调用WSACleanup当然就出错喽.
只要在程序退出的时候调用WSACleanup就可以了.
lovcecpp 2002-12-30
  • 打赏
  • 举报
回复
你说的SOCKET失败,错误代码呢?
另外,你说的其他程序也失败是指在同一台机器上的程序?如果失败错误代码?没有这些信息是很难判断的。如有消息,盼通知
Nepton 2002-12-29
  • 打赏
  • 举报
回复
贴出程序!
win98ddk 2002-12-29
  • 打赏
  • 举报
回复
这个解释也不符合实验的结果,这个线程是唯一要使用Socket的地方,没有了别的Socket,总共也只有一个Socket,实验中还发现,假如是直接关掉应用程序而不调用上面的首尾程序代码,则很正常的关掉了,对其他应用程序没影响。我也试过将上面的代码逐条注释掉,但是也不行,很怪的。我用的是MFC做的DLL框架,会不会有影响呢?
lovcecpp 2002-12-29
  • 打赏
  • 举报
回复
WSACleanup只有在最后一个thread exit 才可以调用。
WSACleanup过早地释放了sock用的资源,其他的sock当然会出错
win98ddk 2002-12-29
  • 打赏
  • 举报
回复
//释放临界段
//DeleteCriticalSection(&G02_crtClientThreadA);
//设置关闭
My02_CloseClientSocket_AS(&ASClientSocketInfo,1,false);
//释放接收缓冲区空间
//GlobalReAlloc(ASClientSocketInfo.Data,100,0);
free(ASClientSocketInfo.Data);
//清理winsock栈
if(WSACleanup()!=0) AfxMessageBox("清理winsock栈出错");
//AfxMessageBox("客户端线程A关闭");
return 0;

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧