On Thu, Feb 22, 2007 at 12:09:18AM +0100, Rhythmic Fistman wrote:
> Issuing simultaneous asynchronous reads and writes on socket is a tiny bit
> rare and special. Are you sure that's what you want to do? If so, great -
> io completion queues can handle it. Bu-ut if libevent was modelled on the 
> unix
> select-style interfaces, most of which don't easily support this kind of 
> thing,
> how is this situation cropping up, assuming that this is just an IOCP port
> of libevent?

Almost all of my use of libevent involves simultaneous reads/writes, for
relays which filter streams on-the-fly, in both directions. It was tricky at
first, but over the course of several revisions it all settled out.

*sigh* Someday I'll have to muster up the energy to change the name, because
on this list its just damn confusing, but my buffered-IO implementation is
in libevnet:

        http://www.25thandclement.com/~william/projects/libevnet.html

Specifically, see src/bufio/socket.c and the functions

        bufio_socket_event_run
        bufio_socket_event_mod
        bufio_socket_event_del
        bufio_socket_event_add
        bufio_socket_poll_handler
        bufio_sink_poll_handler

Cancellations were tricky. Also, what I fail to see in most async libraries
is logic to handle re-entrancy from recursive callbacks. That's what the
FRAME_PUSH/FRAME_POP calls are all about. evdns.c fails in this respect,
last time I looked, as does c-ares; they'll just segfault. My lookup API,
built around c-ares, works around the c-ares problem w/ what I consider an
abysmal hack; I'm looking to maybe fork the guts into libevnet because my
re-entrancy patches were rejected. Anyhow, lookup.c does much, much more
than c-ares, ADNS, or evdns, combined.

_______________________________________________
Libevent-users mailing list
Libevent-users@monkey.org
http://monkey.org/mailman/listinfo/libevent-users

Reply via email to