为什么tcp保持活动状态会影响tcp近距离运行?
我有一个服务器,在接受连接时,我将tcp保持活动状态设置为120秒。但是当我关闭连接时,连接实际上没有关闭。通过为什么tcp保持活动状态会影响tcp近距离运行?,tcp,go,Tcp,Go,我有一个服务器,在接受连接时,我将tcp保持活动状态设置为120秒。但是当我关闭连接时,连接实际上没有关闭。通过netstat-anp | grep 9999,我发现状态是已建立。客户端也没有从套接字收到任何错误。我想知道tcp保持活动是否会影响tcp关闭 PS go 1.4厘 package main import ( "github.com/felixge/tcpkeepalive" "net" "runtime" "time" ) func Start()
netstat-anp | grep 9999
,我发现状态是已建立
。客户端也没有从套接字收到任何错误。我想知道tcp保持活动是否会影响tcp关闭
PS go 1.4厘
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包中提供的方法
您可能不需要任何额外的选项集,但只有在确定需要的情况下,才可以尝试应用适当的系统调用所需的选项。通常不会,我没有足够的时间发布完整的答案-但是您使用的tcpkeepalive库存在错误,并且似乎复制并泄漏了文件描述符。