
On 16/01/2013 5:59pm, Paul Moore wrote:
I've just been looking at this, and from what I can see, am I right in thinking that the IOCP support is*only* for sockets? (I'm not very familiar with socket programming, so I had a bit of difficulty following the code). In particular, it can't be used to register non-socket file objects? From my understanding of the IOCP documentation on MSDN, this is fundamental - IOCP can only be used on HANDLE objects that have been opened with the FILE_FLAG_OVERLAPPED flag, which is not used by "normal" Python IO objects like file handles and pipes, so it will never be possible to poll these objects using IOCP.
Only sockets are supported because it uses WSARecv()/WSASend(), but it could very easily be made to use ReadFile()/WriteFile(). Then it would work with overlapped pipes (as currently used by multiprocessing) or other files openned with FILE_FLAG_OVERLAPPED. IOCP cannot be used with normal python file objects. But see http://bugs.python.org/issue12939 -- Richard