【发布时间】:2013-04-04 23:05:02
【问题描述】:
我正在使用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 是什么意思?
【问题讨论】: