线程退出时绑定的socket端口号不释放

pupu_2009 2008-10-09 11:50:12
如题,我在一个单文档中设置了一个菜单,点击菜单启动一个线程。该线程用来socket接受数据(udp),the app代表的线程用来讲接受的数据显示出来。可有时遇到10048的错误,意思是程序运行一次后绑定的固定本机端口号6000被占用,第二次运行该程序时再绑定该端口就不行了。我的问题是退出程序时如何解除绑定。
...全文
658 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
用户 昵称 2009-02-16
  • 打赏
  • 举报
回复
closesocket不成功
还没淹死的鱼 2009-02-10
  • 打赏
  • 举报
回复
资源没释放干净吧?
沐NeMo 2009-02-09
  • 打赏
  • 举报
回复
呵呵,我也遇到过这样的问题。
1.shutdown(绑定socket)
2.将所有连接或和这个打开的端口有数据传输(还在线)的客户socket全部断开(shutdown,然后closesocket)
3.closesocket()

socket是用全局变量,2因为没有运行如何客服端,也就不用了。用了1和3后,可是还是没有释放端口啊。
不知道为什么。
xuexi1028 2008-10-11
  • 打赏
  • 举报
回复
clearn 这个好像
WinEggDrop 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pupu_2009 的回复:]
我的是这样,线程中死循环接受,要关闭只能在主线程中关闭,可跨线程了,CSocket类有点问题。还有现在第一次运行就报10048错误。在cmd下netstat -na看 有0.0.0.0:6000
[/Quote]

如果你的主socket是全局变量来的话,那么就算不是同一个线程也能关闭的.
pupu_2009 2008-10-09
  • 打赏
  • 举报
回复
我的是这样,线程中死循环接受,要关闭只能在主线程中关闭,可跨线程了,CSocket类有点问题。还有现在第一次运行就报10048错误。在cmd下netstat -na看 有0.0.0.0:6000
pupu_2009 2008-10-09
  • 打赏
  • 举报
回复
我试试,解决了分就是你一个人的。没解决也给你10分
WinEggDrop 2008-10-09
  • 打赏
  • 举报
回复
你的情况应该是绑定的socket因为还有数据传输或连接在进行,所以就算执行了closesocket(),系统还是没将相关的套按字关闭并释放资源.我上面提到的方法应该是可以解决的.
WinEggDrop 2008-10-09
  • 打赏
  • 举报
回复
正确的处理方法是:
1.shutdown(绑定socket)
2.将所有连接或和这个打开的端口有数据传输(还在线)的客户socket全部断开(shutdown,然后closesocket)
3.closesocket()

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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