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

一个 socket 被 close 掉了,如何知道是远端 close 的还是本地 close 的?

  •  
  •   kingslanding · 2018-08-20 10:53:31 +08:00 · 2216 次点击
    这是一个创建于 2283 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直被这个问题困扰, 在 nodejs 中用 websocket,onclose 时 close event 的 code 的是 1000 (正常关闭),但无法查清是本地客户端主动断开的,还是远程服务端断开的。 远程服务端的程序员说他没有关闭, 我这儿也查了,连接后,就一直由心跳包保持,close()函数调都没调。所以就懵了

    我想,既然是正常关闭,总有一个 TCP 的 FIN 握手过程,但如何知道是哪一端发起的呢?

    求各位大佬给个思路

    6 条回复    2018-08-20 14:07:36 +08:00
    liuyanjun0826
        1
    liuyanjun0826  
       2018-08-20 11:49:02 +08:00 via Android
    肯定是远程关的,远程代码无法保证质量,本地代码质量是不会有问题的
    gamexg
        2
    gamexg  
       2018-08-20 12:41:34 +08:00
    没用过 nodejs,但是这个问题抓包可解。
    kingslanding
        3
    kingslanding  
    OP
       2018-08-20 13:16:37 +08:00
    @liuyanjun0826 远程代码 /本地代码都是人编的,质量的问题不会出在这个上轻。一个是客户端 nodejs,一个是服务端 swoole
    kingslanding
        4
    kingslanding  
    OP
       2018-08-20 13:17:54 +08:00
    @gamexg 一两个星期才出现一次,这个包抓得时间忒长了吧
    NickCarter
        5
    NickCarter  
       2018-08-20 13:22:23 +08:00 via iPhone
    我记得有个 close event 里面有个 clean 字段?
    kingslanding
        6
    kingslanding  
    OP
       2018-08-20 14:07:36 +08:00
    @NickCarter 有个 wasClean,指示是否 cleanly closed。但不能指示是哪一方开始的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:27 · PVG 06:27 · LAX 14:27 · JFK 17:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.