On Fri, Jul 1, 2011 at 11:26 AM, Juan Pablo Fernandez <this.j...@gmail.com> wrote: > Hi, > > I've been experimenting with libevent on windows. I want to use IOCP, > worker threads filling a queue layer in a server application. > Bufferevents is a nice fit! And I've written a small server using > bufferevents. However, I'm confused reading the documentation, > saying: > > 1, It's experimental (online book) > 2, Back-end is still select-based. > 3, Can be used for sending (no mention of receive) > > ==> What is the "true" status?
It is indeed experimental. The select-based backend is still used for the event interface provided by event_add, event_del, etc. It turns out that you can't emulate that using IOCP, as far as I can tell.[*] If you want to use IOCP, you need to use bufferevents: the bufferevent interface _can_ be implemented with IOCP. And so there's an implementation of it. To use it, initialize Libevent passing the EVENT_BASE_FLAG_STARTUP_IOCP flag in the event_base_config. This will make subsequent calls to bufferevent_socket_new() return an IOCP-based bufferevent, and evconnlistener_*new() return IOCP-based listeners. [*] Some people have in the past tried to implement the event backend using IOCP, using a hack where "completing" a zero-length read or write indicated that the socket was readable/writable. When we investigated, it turned out that this works for reading, but not for writing: sockets whose buffers are too full to write anything will still accept a zero-length write and report it as "completed." If there's a way around this, or somebody knows differently, I'd love to know about it. yrs, -- Nick *********************************************************************** To unsubscribe, send an e-mail to majord...@freehaven.net with unsubscribe libevent-users in the body.