免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 23467 | 回复: 6

socket占用端口不释放 [复制链接]

论坛徽章:
0
发表于 2008-09-10 15:10 |显示全部楼层
不知道为什么
我用bind绑定了某个端口后 数据的发送接收是OK的
但是即使把socket关闭之后
端口还是被占用了 要等一会儿(大概三分钟左右) 才被释放
请问是什么原因啊?

还有一个问题就是
我每次端口号都是自己随机的指定的
有什么函数可以由系统自行的分配没有使用的端口么?

论坛徽章:
0
发表于 2008-09-10 15:14 |显示全部楼层
使用netstat -anpt 看看是不是TIME_WAIT状态,如果是的话,可以加上REUSE的option

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
发表于 2008-09-11 00:29 |显示全部楼层
服务端:考虑到服务端重启或多宿,为socket设置SO_REUSEADDR基本成为一个定律
客户端:客户端很少有必要bind端口,不bind时内核自动为你分配可用的端口

论坛徽章:
0
发表于 2008-09-11 17:29 |显示全部楼层
如果服务端的程序关闭后,端口不能马上释放掉,需要等一会才能小时,在这之间再启动服务程序是起不来的,但是可以用这个函数,边面这种情况,服务程序关闭后,可以马上再起一次,不会冲突了。
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(&opt));

论坛徽章:
0
发表于 2008-09-16 13:59 |显示全部楼层
原帖由 timespace 于 2008-9-11 00:29 发表
服务端:考虑到服务端重启或多宿,为socket设置SO_REUSEADDR基本成为一个定律
客户端:客户端很少有必要bind端口,不bind时内核自动为你分配可用的端口

原帖由 eveson 于 2008-9-11 17:29 发表
如果服务端的程序关闭后,端口不能马上释放掉,需要等一会才能小时,在这之间再启动服务程序是起不来的,但是可以用这个函数,边面这种情况,服务程序关闭后,可以马上再起一次,不会冲突了。
setsockopt(list ...


就是它,如果还没用的话赶快加到代码里,服务端可以随时重启,屡试不爽
当时困扰了我好几天才找到的它

论坛徽章:
0
发表于 2008-09-16 14:16 |显示全部楼层
3,4L正解~~

论坛徽章:
0
发表于 2008-09-16 15:05 |显示全部楼层
原帖由 cloudice 于 2008-9-16 14:16 发表
3,4L正解~~


给加分,hoho。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP