如何在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运行时而言,确保系统调用返回的句柄是“可轮询的”。确保这一点可能需要更多的技巧,因此最好提出一个更具体的问题。