去TCP超时不工作?

去TCP超时不工作?,tcp,timeout,go,Tcp,Timeout,Go,我正在使用net.Listen()侦听来自客户端的TCP连接 当客户端建立连接时,处理程序(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)

我正在使用
net.Listen()
侦听来自客户端的TCP连接

当客户端建立连接时,
处理程序(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.setReadDaildate(time.Now())
,但似乎仍然不起作用。所以我想知道go中默认的TCP超时是多少,如何设置它

我还使用了
netstat-n
,在杀死客户端后得到了以下结果:

tcp4 0 0 127.0.0.1.12345 127.0.0.1.57296关闭等待

CLOSE\u WAIT
是什么意思?

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

近距离等待

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


@雷克胡:没有完整的、可编译的、最少的代码来重现stdlib bug,或者查看并试图找到您的bug,这是很难帮助的。我似乎记得使用了最后期限,他们为我工作IIRC。
SetReadDeadline(time.Now().Add(N*time.Second))