liuminghao233
V2EX  ›  问与答

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

  •  
  •   liuminghao233 · Jul 10, 2017 · 2000 views
    This topic created in 3227 days ago, the information mentioned may be changed or developed.
    写 socket 程序经常调试就 BOOM 了 然后要等它超时才能重新 BIND。
    有没有直接干掉它的方法
    8 replies    2017-07-11 11:16:46 +08:00
    billlee
        1
    billlee  
       Jul 10, 2017
    SO_REUSEADDR?
    auser
        2
    auser  
       Jul 10, 2017
    如果是因为超时才能 BIND 的原因,那么“干掉” TIME_WAIT 这个思路是非常不合适的。

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

    @auser 其实我觉得试错学起来虽然痛苦反而快。不过同时看书很重要,不然有些坑不说不知道。
    fisher335
        7
    fisher335  
       Jul 11, 2017 via iPhone
    可以指定 timewait 回收的时间!
    fisher335
        8
    fisher335  
       Jul 11, 2017 via iPhone
    net.ipv4.tcp_tw_reuse =1
    net.ipve.tcp_tw_recycle=1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   943 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 21:29 · PVG 05:29 · LAX 14:29 · JFK 17:29
    ♥ Do have faith in what you're doing.