去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))