如何在windows上将syscall.Handle转换为net.Conn?

如何在windows上将syscall.Handle转换为net.Conn?,windows,go,Windows,Go,考虑以下几点: if fd, err = syscall.Socket(family, syscall.SOCK_STREAM, syscall.IPPROTO_TCP); err != nil { return } // do something on fd like bind ... if err = os.NewSyscallError("connect", syscall.Connect(fd, sockaddr)); err != nil { syscall.Clo

考虑以下几点:

if fd, err = syscall.Socket(family, syscall.SOCK_STREAM, syscall.IPPROTO_TCP); err != nil {
    return
}

// do something on fd like bind ...

if err = os.NewSyscallError("connect", syscall.Connect(fd, sockaddr)); err != nil {
    syscall.Close(fd)
    return
}

f := os.NewFile(uintptr(fd), "socket")
conn, err = net.FileConn(f)
if err != nil {
    fmt.Println(err)
    f.Close()
    syscall.Close(fd)
}
结果:
文件+网络套接字:windows不支持

有没有办法在Windows上将
syscall.Handle
转换为
net.Conn


我使用的是Windows 10和go版本1.10.3 Windows/amd64

,但您实际上选择了正确的方法,恐怕您不能这样做,但是
net.FileConn
确实被明确记录为Windows不支持:«在NaCl和Windows上,
FileConn
FileListener
FilePacketConn
函数未实现。»。解决此问题的一种方法是,我认为,由于v1.10版,现在通过netpoller处理对任何可轮询文件描述符/句柄的访问,因此,您可以做两件事:1)围绕句柄编写自定义类型,该句柄将实现
net.Conn
(记住它只是一个接口);2) 就Go运行时而言,确保系统调用返回的句柄是“可轮询的”。确保这一点可能需要更多的技巧,因此最好提出一个更具体的问题。