无法从pyhandle获取文件描述符

时间:2014-12-06 23:15:31

标签: python winapi twisted

我想使用带有TUN界面的扭曲回调,我在Windows中使用Python打开了这个界面。我正在使用win32file.CreateFile()获取PyHandle。为了使用Twisted,我(想想我)必须使用文件描述符。所以我试图通过这样做转换为fd:

self.tunfd = msvcrt.open_osfhandle(self.tun_handle, 0)

使用零作为第二个参数是我在网上看到的许多示例中显示的故障排除,并且尝试使用适用的标志并未解决问题。在每种情况下我都会收到此错误:

self.tunfd = msvcrt.open_osfhandle(self.tun_handle, 0)
IOError: [Errno 22] Invalid argument

为什么这不起作用?是否有更简单的方法来使用Twisted with PyHandle?

1 个答案:

答案 0 :(得分:1)

Windows上的文件描述符是一个技巧。我不知道是否有某种方法可以在Windows上为TUN设备获取文件描述符,但即使你设法以某种方式得到它,它也不适用于Twisted。在Windows上,Twisted仅限于与表示套接字的文件描述符进行交互。这与接受文件描述符的Windows API的工作方式有关。

您有两种选择。您可以使用IReactorWin32Events来监控Windows Event,然后使用其他一些Windows API在tun_handle发生有趣事件时触发事件。或许您可以使用IOCPReactor直接监视有趣活动的句柄(遗憾的是,IOCPReactor API没有详细记录 - 但我认为registerHandle可能是主要的事情。