免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11094 | 回复: 6
打印 上一主题 下一主题

请教bind failed address already in use的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-08 17:38 |只看该作者 |倒序浏览
我写的服务器bind9919端口,写的客户端程序连接服务器。当客户端连上服务器后,如果服务器异常断开,比如CTRL+C退出后,用netsate看会有客户端到服务器的连接状态,这时候再重启服务器程序会提示bind failed address already in use,导致服务器无法正常工作,必须客户端也断开连接后,连接状态才消失,服务器才可以正常启动。请问怎么处理呢?谢谢
ps:我后来服务器专门写了捕捉CTRL+C的信号代码,是在关闭程序前吧fd都close掉,但是还是会有连接存在,非要客户端close后才消失,才能起服务器。怎么处理呢,谢谢

论坛徽章:
0
2 [报告]
发表于 2009-07-08 18:57 |只看该作者
我也有此困惑,不过不关客户端等一会儿bind也会消失

论坛徽章:
0
3 [报告]
发表于 2009-07-08 19:49 |只看该作者
close前shutdown试试

论坛徽章:
0
4 [报告]
发表于 2009-07-08 20:10 |只看该作者
多进程的?
有没有setsockopt设置地址复用啊

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
5 [报告]
发表于 2009-07-08 20:11 |只看该作者
原帖由 freecr 于 2009-7-8 17:38 发表
我写的服务器bind9919端口,写的客户端程序连接服务器。当客户端连上服务器后,如果服务器异常断开,比如CTRL+C退出后,用netsate看会有客户端到服务器的连接状态,这时候再重启服务器程序会提示bind failed ad ...


TIME_WAIT状态

UNP3

By default, when the listening server is restarted in (d) by calling socket, bind, and listen, the call to bind fails because the listening server is trying to bind a port that is part of an existing connection (the one being handled by the previously spawned child). But if the server sets the SO_REUSEADDR socket option between the calls to socket and bind, the latter function will succeed. All TCP servers should specify this socket option to allow the server to be restarted in this situation.

论坛徽章:
0
6 [报告]
发表于 2009-07-08 20:59 |只看该作者
原帖由 gawk 于 2009-7-8 20:10 发表
多进程的?
有没有setsockopt设置地址复用啊


应该是这个方法了
setsockopt(ListenSocket, SOL_SOCKET,SO_REUSEADDR , &flag, sizeof(int))
只记得解决过这个问题,怎么解决忘记了,太菜了

论坛徽章:
0
7 [报告]
发表于 2009-07-09 14:05 |只看该作者
谢谢大家帮助,是必须设定地址重用,设置好之后就可以了参考网上的资料说,写服务器程序必须要这样设置一下的。
我顺便看了一下啊vsftp的源代码。一面也有这样的设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP