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