asyncore's module readwrite() function, used when invoking
asyncore.loop(use_poll=1), erroneously calls handle_read_event() when
receiving OOB (Out Of Band) data. handle_expt_event() should be called
instead.
The patch in attachment does that.
In addition I strongly think that POLLERR, POLLHUP and POLLNVAL events
handling is incorrect too.
As far as I read from here:
http://www.squarebox.co.uk/cgi-squarebox/manServer/usr/share/man/man0p/poll.h.0p
...they refers to the following events:
POLLERR An error has occurred (revents only).
POLLHUP Device has been disconnected ( revents only).
POLLNVAL Invalid fd member (revents only).
They are actually associated to handle_expt_event() and this is
incorrect since it should be called only when receiving OOB data.
if flags & (select.POLLERR | select.POLLHUP | select.POLLNVAL):
obj.handle_expt_event()
I'm not sure what should be called instead, if handle_read_event or
handle_read or handle_error.
I tried to take a look at how Twisted manages the thing but it seems
that OOB is not even supported.
Maybe someone with more experience in using select.poll could clarify that. |