V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
opentrade
V2EX  ›  Windows

UDP Socket 失效

  •  
  •   opentrade · 2021-04-23 17:20:31 +08:00 · 2190 次点击
    这是一个创建于 1309 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个客户反馈断网后软件没有自动重连,查看 log 后发现一直在发消息,只是一直没发出去。于是我把网线反复插拔测试,都没有出现重连失败的问题。他那边关开网关也不会有问题,出问题的场景是网络重新拨号后才会产生,他还说他们用了 AC 。不知道有没有人有过相关经验。似乎解决方案只能是 timeout 后重新创建 UDP socket,甚至重启进程。

    13 条回复    2021-04-24 12:47:42 +08:00
    opengps
        1
    opengps  
       2021-04-23 17:48:05 +08:00
    软件没有设计心跳包吗?
    udp 这种协议,没有心跳包辅助的话确实不能判断是否网络通畅。用心跳报的超过次数不回复就重新建立来实现更靠谱一些
    missdeer
        2
    missdeer  
       2021-04-23 17:55:31 +08:00
    我以前遇到过一个 UDP socket 发一段时间数据后就发不出去了,不知道原因,重新创建一个就好了
    我也想知道原因
    est
        3
    est  
       2021-04-23 17:59:31 +08:00
    有些 ISP 会搞 UDP 的包。直接抽风

    Valve 的一些游戏我之前打港服,就打一半抽风。。PPPoE 重播换个 IP 又好了。
    gBurnX
        4
    gBurnX  
       2021-04-23 19:53:29 +08:00
    心跳这种关键业务,别用 UDP,甚至连 ICMP 这种 ping 在很多场合下都有问题。用 tcp 不香吗?

    你用 Windows,c++直接 thrift,C#直接 wcf,java 、Python 有一堆更简单的 WebService,就算不行,远程直接写 log 到 web mysql 也不是不行。

    一堆靠谱方案,为啥非得选 udp.....
    HUNYXV
        5
    HUNYXV  
       2021-04-23 20:03:27 +08:00
    不是还有 “基于 UDP 协议实现的可靠传输协议”:KCP 、QUIC 吗,要不试试这俩

    (我没有用过)
    zhs227
        6
    zhs227  
       2021-04-23 22:21:38 +08:00
    要做心跳,保活,重建。
    ReferenceE
        7
    ReferenceE  
       2021-04-23 22:49:00 +08:00 via Android
    @gBurnX C# wcf 好像?淘汰了
    iseki
        8
    iseki  
       2021-04-24 00:17:57 +08:00 via Android
    不负责任瞎猜,可能是 socket 绑定到了特定网络接口上?每次逻辑上的重连都干掉 socket 重开吧
    iseki
        9
    iseki  
       2021-04-24 00:18:38 +08:00 via Android
    用 tcp 时重连不也都是重开 socket 吗
    cache
        10
    cache  
       2021-04-24 08:33:07 +08:00
    看 log 在发消息不能说明问题,至少抓个包确定 upd 包发出去了
    ho121
        11
    ho121  
       2021-04-24 08:50:54 +08:00 via Android
    windows 吗?之前在做 dns 相关的东西时也好像遇到过
    opentrade
        12
    opentrade  
    OP
       2021-04-24 09:26:11 +08:00 via Android
    @ho121 的确出现在 windows,问题很难复习,应该与操作系统无关。因为 mac 上我的一个发现是,在网络连接之前创建的 udp socket 也是无效的,当时解决了也没太在意
    realpg
        13
    realpg  
       2021-04-24 12:47:42 +08:00
    出问题的场景是网络重新拨号后才会产生。。。。。。

    五元组都变了,还想不重连?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2837 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:18 · PVG 17:18 · LAX 01:18 · JFK 04:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.