我正在通过父进程传递标准的TCP连接:
cf, err = (*c.Conn.TCP).(*net.TCPConn).File()
if err != nil {
log.Fatalf("failed to upgrade BNC: failed to retrieve file for client: %+v", err)
}
extraFiles = append(extraFiles, cf)
c.Conn.FD = cf.Fd()
noCloseOnExec(c.Conn.FD)
到子进程(c.Conn.FD == fdi):
connFile := os.NewFile(uintptr(fdi), "upgraded-gob-conn")
conn, err := net.FileConn(connFile)
if err != nil {
panic(err)
}
err = connFile.Close()
if err != nil {
panic(err)
}
这对于纯TCP连接非常有用。在尝试访问tls连接的File()时,我发现它的TCPConn没有公开。我有一个解决方法:始终使用纯TCP服务和连接,但在保留对原始TCP连接的引用的同时立即升级连接。我不确定这是否行得通。
非常感谢您的帮助。