2013/1/16 Paul Moore <p.f.moore@gmail.com>
On 3 November 2012 21:20, Richard Oudkerk <shibturn@gmail.com> wrote:
The IOCP proactor does not support ssl (or ipv6) so main.py does not succeed in downloading from xkcd.com using ssl. Using the other proactors it works correctly.
The basic interface for the proactor looks like
class Proactor: def recv(self, sock, n): ... def send(self, sock, buf): ... def connect(self, sock, address): ... def accept(self, sock): ...
def poll(self, timeout=None): ... def pollable(self): ...
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.
It works for disk files as well, but you indeed have to pass FILE_FLAG_OVERLAPPED when opening the file. This is similar to sockets: s.setblocking(False) is required for asynchronous writes to work. -- Amaury Forgeot d'Arc