我正在使用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意思?
宝慕林4294392
相关分类