请问如何可以在 golang 建立的 tcp 连接中在客户端主动断开时,让服务端不发送 FIN 包

2020-07-29 13:28:02 +08:00
 labulaka521
难道是一直发送数据?
3018 次点击
所在节点    程序员
21 条回复
goofool
2020-07-29 13:50:39 +08:00
那就不是 TCP 协议了
nacosboy
2020-07-29 13:50:39 +08:00
你可以让 client 主动发送个信号给 server,server 收到信号后 panic,就不会发 FIN 了
ChristopherWu
2020-07-29 13:53:32 +08:00
为什么要这么做?
Ariver
2020-07-29 13:54:31 +08:00
先搞明白 tcp/ip
yph007595
2020-07-29 13:57:17 +08:00
@barryzxb 优秀
heijiaotuan
2020-07-29 14:00:21 +08:00
客户端做一个假断开, 并且标记为可重用状态, 下一次有人用再断开上一个 socket.
tempdban
2020-07-29 14:01:36 +08:00
楼上几个嘲讽楼主之前,是不是应该自己先看看 tcp 协议?
@goofool

@Ariver
labulaka521
2020-07-29 14:46:25 +08:00
讨论一个问题,何必这么咄咄逼人呢
@goofool
@ChristopherWu
@Ariver
我也想问什么这么做,大概是别人问我了吧
tempdban
2020-07-29 14:47:50 +08:00
搜索了一下,golang 貌似可以半关闭的。
https://stackoverflow.com/questions/23879000/net-tcpconn-allowing-write-after-fin-packet
这里您要关注一下,client 半关闭后收到 server 的 payload 会怎么处理,有可能是 rst,也有可能可以正常处理。
goofool
2020-07-29 14:48:07 +08:00
@tempdban 这也叫嘲讽?大棚里长大的么
labulaka521
2020-07-29 14:51:21 +08:00
使用 CloseWrite 即可
labulaka521
2020-07-29 14:52:24 +08:00
@goofool 可能你没理解我什么意思
别吵 此贴 终止 别回复了
tempdban
2020-07-29 14:54:53 +08:00
@goofool 抱歉嘲讽是我用词不当,主要是针对下面的那位朋友,但是你 tcp 是要好好学学的
LANB0
2020-07-29 14:57:26 +08:00
C 可以配置 SO_LINGER 来强制 reset,golang 没理由不能
ChristopherWu
2020-07-29 15:33:18 +08:00
@labulaka521 一个问题,先要有目标场景啊。有可能你说的做法并不是解决你这个问题的最佳办法。
如果你单纯只是想知道怎么做,直接说只是好奇,就好了——这种场景下,方法就更多了。
wangritian
2020-07-29 15:45:25 +08:00
好奇使用场景,学习一下
also24
2020-07-29 15:49:01 +08:00
labulaka521
2020-07-29 16:02:50 +08:00
@ChristopherWu 别人问我的 我纯属好奇问一下

@wangritian 我也不知道这有什么使用场景
labulaka521
2020-07-29 16:07:04 +08:00
@also24 学习了
labulaka521
2020-07-29 16:12:56 +08:00
@also24 这个真有趣 hhh

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694013

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX