怎么把处于 TIME_WAIT 状态的 SOCKET 干掉

2017-07-10 22:57:23 +08:00
 liuminghao233
写 socket 程序经常调试就 BOOM 了 然后要等它超时才能重新 BIND。
有没有直接干掉它的方法
1654 次点击
所在节点    问与答
8 条回复
billlee
2017-07-10 23:25:06 +08:00
SO_REUSEADDR?
auser
2017-07-10 23:39:49 +08:00
如果是因为超时才能 BIND 的原因,那么“干掉” TIME_WAIT 这个思路是非常不合适的。

我看了楼主发的帖子,之前有问到 TCP 粘包的问题。我觉得网络编程方面,你的基础比较差。这里问的问题,在 Unix 网络编程 API 那卷都是会讲的基础问题。Socket 网络编程在细节上有非常多的点,不建议初学时通过各种试错来推进。建议先好好把书读一遍,根据章节内容做代码练习,对全局有个大体的印象。
liuminghao233
2017-07-11 00:00:28 +08:00
@auser 好的
liuminghao233
2017-07-11 00:11:07 +08:00
@auser 我按自己的思路用 c++写 ss 现在基本上已经完成了 我试错只是处理数据的时候内存越界经常 boom,加密解密又要分包转发实在是有点乱,加上今天第一次用 ubuntu+cb+gcc 调得有点烦躁因为之前 xcode 没有这么多问题ˊ_>ˋ
xfspace
2017-07-11 00:25:59 +08:00
用 exec 把网络适配器禁用再启用
ryd994
2017-07-11 08:41:41 +08:00
加 SO_REUSEADDR 就行
但是平时加这个会有安全隐患和各种奇怪 bug,建议加个 debug 开关

@auser 其实我觉得试错学起来虽然痛苦反而快。不过同时看书很重要,不然有些坑不说不知道。
fisher335
2017-07-11 11:13:31 +08:00
可以指定 timewait 回收的时间!
fisher335
2017-07-11 11:16:46 +08:00
net.ipv4.tcp_tw_reuse =1
net.ipve.tcp_tw_recycle=1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/374369

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX