V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
liuminghao233
V2EX  ›  问与答

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

  •  
  •   liuminghao233 · 2017-07-10 22:57:23 +08:00 · 1649 次点击
    这是一个创建于 2699 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写 socket 程序经常调试就 BOOM 了 然后要等它超时才能重新 BIND。
    有没有直接干掉它的方法
    8 条回复    2017-07-11 11:16:46 +08:00
    billlee
        1
    billlee  
       2017-07-10 23:25:06 +08:00
    SO_REUSEADDR?
    auser
        2
    auser  
       2017-07-10 23:39:49 +08:00
    如果是因为超时才能 BIND 的原因,那么“干掉” TIME_WAIT 这个思路是非常不合适的。

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

    @auser 其实我觉得试错学起来虽然痛苦反而快。不过同时看书很重要,不然有些坑不说不知道。
    fisher335
        7
    fisher335  
       2017-07-11 11:13:31 +08:00 via iPhone
    可以指定 timewait 回收的时间!
    fisher335
        8
    fisher335  
       2017-07-11 11:16:46 +08:00 via iPhone
    net.ipv4.tcp_tw_reuse =1
    net.ipve.tcp_tw_recycle=1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2854 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:16 · PVG 14:16 · LAX 22:16 · JFK 01:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.