为什么tcp保持活动状态会影响tcp近距离运行?

为什么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()

我有一个服务器,在接受连接时,我将tcp保持活动状态设置为120秒。但是当我关闭连接时,连接实际上没有关闭。通过
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库存在错误,并且似乎复制并泄漏了文件描述符。