On Sat, Mar 07, 2009 at 01:45:21PM -0500, Thor Lancelot Simon wrote:
 [...]
> I see two ways to handle this.  One is with very, very nasty application
> logic, and the other is to simply set two separate events with the SSL
> fd, each waiting on EV_WRITE.  So when the SSL fd comes ready for write --
> I'd hope -- both my pending SSL_read() and my pending SSL_write() would
> be invoked, each from a separate event's callback.

The first way is what you have to do with Libevent 1.4.x and earlier;
Libevent only supports one _pending_ event at a time per fd/operation
pair.  In other words, it's okay to have two events set to watch
EV_WRITE on the same FD, but you can only ever add one at a time.

The application logic to handle this isn't actually so bad; instead of
having two events (one "write", and one "write in order to read"),
have just one "write for something" event, and have your per-fd data
structure remember which underlying semantic events you actually
meant.  The Tor source code does this if you want to check out an
open-source example of how it's possible; I'm sure there are other
good projects to check out too.

On the other hand, the development branch for Libevent 2.0 _does_
support multiple events per fd; if you're willing to use alpha code
until Libevent 2.0 stabilizes, that might be one way to go.

(I'd also like to get a bufferevent filter that handles openssl into
Libevent 2.0, but the implementation for that one isn't done yet.)

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

Reply via email to