ZHH- 关于setsockopt(s,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt))的问题

fancy_zhh 2008-11-10 10:28:33

现在碰到一个问题, 就是发现很多socket端口都是CLOSE_WAIT状态,比如:
ema445.3300 ema445.55564 49152 0 49152 0 CLOSE_WAIT
ema445.3300 ema445.55565 49152 0 49152 0 CLOSE_WAIT
ema445.3300 ema445.55566 49152 0 49152 0 CLOSE_WAIT
ema445.3300 ema445.55567 49152 0 49152 0 CLOSE_WAIT
ema445.3300 ema445.55568 49152 0 49152 0 CLOSE_WAIT
ema445.3300 ema445.55569 49152 0 49152 0 CLOSE_WAIT
ema445.3300 ema445.55570 49152 0 49152 0 CLOSE_WAIT
。。。。。。

这样会导致后面的socket不能再进行连接。
这里第一列是服务器端的端口号,第二列是客户端的端口号(如:55564, 这里我想问一下这个端口号不是系统随机产生的?)
上网查了一下,听说使用SO_REUSEADDR应该能解决这样的问题(重用端口号)。但是似乎这个选项在客户端代码中不起作用。
是否我一定需要修改服务器的代码去使用这个选项? SO_REUSEADDR这个选项是不是可以避免重开客户端的端口号(第二列的内容)?
对于服务器的3300这个端口是不起作用的?

有人对此比较了解吗?
...全文
717 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2008-11-10
  • 打赏
  • 举报
回复
xhs_lh04 2008-11-10
  • 打赏
  • 举报
回复
检查你的程序,看看哪里有未关闭的连接(退出时)
这也是一种广义的泄漏了
如果是TIME_WAIT,那是正常的,一端关闭,会等待对方的FIN信号,系统会延续MSL秒后才释放此SOCKET句柄,那是可以通过一些选项来缩短的

客户端的端口你可以指定,就是在连接前 bind到某个端口。一般不需要这样,
系统会按一定的规则给你自动分配的。
cyj626 2008-11-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xhs_lh04 的回复:]
CLOSE_WAIT
由于程序写的不好,一端已经close了连接,而另一端由于各种原因没有close,出现了CLOSE_WAIT状态。造成大量的连接存在,最终导致连接过多,不能建立新的连接。
[/Quote]
定时呀,时间到了,没有返回就err等其他动作
xhs_lh04 2008-11-10
  • 打赏
  • 举报
回复
CLOSE_WAIT
由于程序写的不好,一端已经close了连接,而另一端由于各种原因没有close,出现了CLOSE_WAIT状态。造成大量的连接存在,最终导致连接过多,不能建立新的连接。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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