socket连接不成功,错误码是10004

pandaCat123 2015-10-29 09:11:07
我的VC程序运行很长时间后,会很奇怪的出现csocket的连接不成功,GetLastError得到的错误码是10004,MSDN提示说是阻塞操作被调用WSACancelBlocking中止引起该错误,可我从来不调用这个函数。不知道系统为啥会自动调用这个来中止这个阻塞connect连接。关闭重启程序也没用,重启电脑后再打开程序就ok不报错了,这个10004错是啥问题,求大神指教啊!

程序里客户端代码就是不断重复进行基本的csocket的create,connect,send,receive,close
我看网上有人说是因为socket.close()操作并没有立即释放相应的socket端口资源引起的,是这个原因吗? 但就算close不马上释放资源,socket在create创建时应该不会去操作未释放的无效端口资源吧
...全文
2526 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
会很奇怪的出现csocket的连接不成功?肯定是有链接。没有关闭。链接多少次就应该关闭多少次。
gnorth 2015-10-30
  • 打赏
  • 举报
回复
检查下是不是正在connect的时候,其他地方,对同一个对象close操作了?
赵4老师 2015-10-29
  • 打赏
  • 举报
回复
不断重复进行基本的csocket的create,connect,send,receive,close 应改为 先create,再不断重复connect,send,receive,close
pandaCat123 2015-10-29
  • 打赏
  • 举报
回复
多谢,我先检测下资源泄露情况 另外麻烦问下,就调用CSocket.close()关闭socket是不是不彻底,有没什么问题,是否应该用shutdown或其他操作来确保socket的关闭不会有问题
引用 3 楼 zhao4zhong1 的回复:
使用netstat命令查看当前socket资源占用情况。 检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
tiger波波 2015-10-29
  • 打赏
  • 举报
回复
是不是你客户端close后,服务器那边没有close,导致服务器那边资源用尽而连接失败。
赵4老师 2015-10-29
  • 打赏
  • 举报
回复
使用netstat命令查看当前socket资源占用情况。 检查是否资源泄漏的办法之一: 在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象 让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
pandaCat123 2015-10-29
  • 打赏
  • 举报
回复
调用CSocket.create()时,是成功返回,不过确实创建成功后connect时,就报错10004了 如果socket资源用尽,create时不会直接失败吗? 是否有可能create成功但是用到了关闭但未释放的socket资源?
oyljerry 2015-10-29
  • 打赏
  • 举报
回复
是不是socket资源被用尽了等,没有办法创建新的
pandaCat123 2015-10-29
  • 打赏
  • 举报
回复
唉,还是不太清楚为什么会在connect连接时产生10004的错误,检查了下程序也没资源泄露的问题

18,356

社区成员

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

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