2014-12-06 64 views
1

我想用在Windows中使用Python打开的TUN接口使用扭曲回调。我得到一个使用win32file.CreateFile()的PyHandle。为了使用Twisted,我(想我)必须使用文件描述符。所以,我想通过这样做是为了转换为FD:从pyhandle获取文件描述符时遇到困难

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

使用零作为第二个参数是什么显示在很多例子,我在网络上看到的,而故障排除和适用的标志实验现在为止还没有解决了这个问题。在每种情况下,我收到此错误:

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

为什么不能这样工作?有没有更简单的方法来使用PyHandle Twisted?

回答

1

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

您有两种选择。您可以使用IReactorWin32Events来监视Windows Event,然后在tun_handle发生一些有趣的事情时使用其他Windows API来触发事件。或者,您可以使用IOCPReactor来直接监视有趣活动的句柄(不幸的是,IOCPReactor API尚不完善,但我认为registerHandle可能是主要的)。