为了账号安全,请及时绑定邮箱和手机立即绑定

去 TCP 超时不起作用?

去 TCP 超时不起作用?

Go
犯罪嫌疑人X 2021-06-03 18:53:06
我正在使用net.Listen()侦听来自客户端的 TCP 连接。当客户端建立连接时,Handler(conn net.Conn)会处理它。func Handler(conn net.Conn) {  read_len, err := conn.Read(request)  if err != nil {    if neterr, ok := err.(net.Error); ok && neterr.Timeout() {      fmt.Println(neterr)      PILOG("Client timeout!", PILOGWARNING)      conn.Close()      return  }}我使用测试客户端连接然后突然杀死客户端而不发送DISCONNECT消息。我的服务器应该在达到超时时关闭连接,但经过长时间的等待后它从未发生过。我也试过了,conn.SetReadDeadline(time.Now())但似乎还是不行。所以我想知道 go 中默认的 TCP 超时是多少,我该如何设置?netstat -n杀死客户端后,我也使用并得到了以下结果:tcp4       0      0  127.0.0.1.12345    127.0.0.1.57296    CLOSE_WAIT什么CLOSE_WAIT意思?
查看完整描述

1 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

SetReadDeadlineAFAIK 有效,但SetReadDeadline(time.Now())没有合理用途,我相信这就是问题所在。要从现在开始超时,例如 N 秒,请使用:

SetReadDeadline(time.Now().Add(N*time.Second))

来自维基百科

关闭等待

(服务器和客户端)代表等待本地用户的连接终止请求。


查看完整回答
反对 回复 2021-06-07
  • 1 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信