On Thu, Aug 24, 2000 at 06:13:03PM +0200, [EMAIL PROTECTED] wrote:
> I forgot to mention that there are a lot of other ways to implement asynch
> i/o, for example you could just transfer the data inside the signal
> handler ;)

THAT's portable.  :-)

> However, as for Event I think one could implement the internal event loop
> using the kernel event queue by doing this (this should be portable with
> small changes to solaris and other unices, maybe Uri can verify this? It is,
> however, the same as on BSD AFAIK):
> 
> setup-phase:
>    block our rt-signal (or SIGIO)
>    for every filehandle
>       fcntl fh, F_SETSIG, <our predefined rt-signal OR SIGIO as fallback>
>       fcntl fh, F_SETFL, O_ASYNC
> 
> then the event loop becomes:
>    sigtimedwait (signals-to-wait-for, &mysiginfo, timeval);
>    if (signal is our rt-signal/SIGIO)
>      if (mysiginfo is valid)
>        dispatch event
>      else
>        use old-fashioned select to get events
>    elseif signal received?
>      dispatch signal handler
>    else
>      timeout (dispatch timer events)

Sure, the hard part is working code.  ;-)

> This should be very efficient, and automatically falls back to seletc when
> the number of events becomes too large for the event queue. The phhttpd
> package does use this exact technique.
> 
> (Of course one must be careful, as not every kernel/libc combination
> supports this, but this shouldn't be much different than checking for
> poll/select features).

If they got it to work then perhaps we can borrow some code.

> > I find myself slowly gravitating away from software (and towards
> > trading).  :-)
> 
> That's bad, the world depends on a very active Event maintainer, as in no
> far future, Event will be a standard perl core module!! Or so I think!

Well, I haven't disappeared yet and I'm sure that a new maintainer could
be procured, if necessary.

-- 
May the best description of competition prevail.
      (via, but not speaking for Deutsche Bank)

Reply via email to