2
我有一台服务器,当接受连接时,我设置了tcp-keep-alive达120秒。但是当我关闭连接时,实际上连接没有关闭。通过netstat -anp | grep 9999
,我发现状态为ESTABLISHED
。并且客户端也没有从套接字中收到任何错误。我想知道tcp-keep-alive会影响tcp-close吗?为什么tcp-keep-alive会影响tcp-close进去?
PS去1.4 CentOS的
package main
import (
"github.com/felixge/tcpkeepalive"
"net"
"runtime"
"time"
)
func Start() {
tcpAddr, err := net.ResolveTCPAddr("tcp4", "127.0.0.1:9999")
if err != nil {
return
}
listener, err := net.ListenTCP("tcp", tcpAddr)
if err != nil {
return
}
for {
conn, err := listener.AcceptTCP()
if err != nil {
continue
}
go handleClient(conn)
}
}
func handleClient(conn *net.TCPConn) {
kaConn, err := tcpkeepalive.EnableKeepAlive(conn)
if err != nil {
} else {
kaConn.SetKeepAliveIdle(120 * time.Second)
kaConn.SetKeepAliveCount(4)
kaConn.SetKeepAliveInterval(5 * time.Second)
}
time.Sleep(time.Second * 3)
conn.Close()
return
}
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
Start()
}
通常它不会,我没有足够的时间发布一个完整的答案 - 但是你使用的tcpkeepalive库是错误的,似乎是复制和泄漏文件描述符。 – nos 2015-02-06 10:46:36