我有一个服务器,在接受连接时,我将 tcp-keep-alive 设置为 120 秒。但是当我关闭连接时,实际上连接并没有关闭。by netstat -anp | grep 9999
,我发现状态是 ESTABLISHED
。客户端也没有从 socket 收到任何错误。我想知道 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()
}
最佳答案
不要使用那个 keepalive 库。它复制文件描述符,但无法关闭它们。
如果需要设置KeepAlive,使用net包中提供的方法。
您可能不需要设置任何额外的选项,但只有当您确定需要时,您才可以尝试通过适当的系统调用来应用所需的内容。
关于tcp - 为什么 tcp-keep-alive 会影响 go 中的 tcp-close?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363575/