2014-12-06 108 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可能是主要的)。