On Sat, 25 May 2002, Allen Smith wrote:
<> On May 25, 6:28am, Clemens Schrimpe wrote:
<> > <> > In the "HAS_POLL" version of pe_sys_multiplex() I replaced
<> > <> >
<> > <> > if (ev->poll & PE_W) bits |= (POLLOUT | POLLWRBAND);
<> > <> > with
<> > <> > if (ev->poll & PE_W) bits |= POLLOUT;
<> > <> >
<> > <> > And everything works just the way expected. Now I guess you didn't
<> > <> > put in POLLWRBAND just for the fun of it, right?
<> > <> > .. So, what was the initial reason you put it there?
<>
<> Perhaps because POLLOUT alone doesn't pick up "high-priority data
<> writeable" (at least it doesn't on IRIX)? Admittedly, high-priority data is,
<> well, uncommon. Exactly what is the problem on Solaris?
The condition with POLLWRBAND is always true on Solaris 7 and 8
at least for TCP sockets (obviously, as you can /always/ send "the" OOB
octet ;-). Thus the callback is constantly being called, regardless of the
sockets ability to receive further data from the process, which is -well-
"counterproductive".
Since the Event::io module is very flexible in regards to what events can
be "waited" for: Why not introduce another set of conditions, like
"urgent" ('u') or "out-of-band" ('o') to still provide the functionality
for those few, who really use urgent/oob data together with Event::io
triggers on the writing end of a socket/pipe/whatever.
(Apparently not very many people seem to use Event::io for write events
anyway. The Event module has been around for some time and Solaris is not
exactly "uncommon", but still I had to find the problem just recently ...)
Greetings,
Clemens