代码大概是这样的
let s: Socket;
//之前 查阅资料后发现不优雅 不发送 FIN 包
s.destroy();
//现在 使用 end 在销毁
s.end(() => s.destroy());
//现在这个 s 依旧没有立即销毁,还能收到数据,需要在等一会才会关闭
有没有好的解决方案
1
ysc3839 227 天前 via Android
谁说 socket.destroy() 不会发送 FIN 的?我抓包看了会发。
|
3
FishBear OP @ysc3839 https://stackoverflow.com/questions/9191587/how-to-disconnect-from-tcp-socket-in-nodejs
但调用时 socket.destroy ,客户端连接会在没有强行接收 FIN 包的情况下被破坏。最好的做法是 socket.destroy 尽可能避免致电。 |
4
sujin190 227 天前 via Android 1
end 发送 fin 后,客户端暂时不给你回 fin2 而是继续发送数据,那你就是能继续收到数据的啊,就算客户端立刻关闭,那已发送的数据就应该继续收完了,本来你就需要等 close 事件,没啥问题啊,否则你直接 destory 就好了
|
5
rrfeng 227 天前
tcp 四次挥手没学好?
|
6
ysc3839 227 天前 via Android 1
@FishBear
他说的也不是不发送 FIN ,而是不等对端发送 FIN 就关闭。 他也没有给出避免使用 socket.destroy() 的理由。具体用不用当然要看用途,比如你的客户端收到了一大堆错误数据,那用 socket.destroy() 关闭并没什么问题,难不成还只能用 socket.end() 然后等半天对方发完错误数据? |
7
sohusi 226 天前 1
|
10
FishBear OP 找到了一个更合适的 api .destroySoon()
|