I'm still wrapping up the coding/documentation process, so this is just an HTML-ification of the current README. Check out the libedio Project Page for more up-to-date information.

Basically, the point of libedio is to make network programming simple. It helps you write your applications quicker, without IO bugs to track down, and with little overhead. You register some functions with the library, and it calls those functions (with appropriate arguments) when certain events happen. libedio currently provides callbacks that allow you to simplify the process of writing a network application a great deal. You no longer have to worry about buffer management, searching for delimiters, or handling multiple connections simultaneously--libedio handles all that for you!

A more formal description, along with API documentation, will be up here in the next few weeks. For now, I'll include the README below, and a another link to the libedio Project Page.

I'm definitely open to extending or modifying the library to your needs, so let me know what functionality it's missing

Currently libedio is only available via CVS. You can check it out as below:

cvs login
cvs -z3 co libedio

libedio 0.0.1

Copyright (c) 2003 Josh Myer <>

libedio is released under the LGPL.

This is the first release of the Event-Driven I/O Library (libedio). Let me know if you have any wants/needs for it to do more than it currently does.

libedio allows you to worry more about the high-level concepts of IO than deal with the nuances of send/recv/read/write. You register connections with it, and it deals with the low-level Unix things, providing you with callbacks when certain "events" happen.

The only real documentation at this point is to be found in the example programs under utils/.

There are three example programs included in the distribution:

Please note that pop3test.c depends on libConfuse, available from At this time, the current version of libConfuse is 1.2.3, which may have a buffer overflow vulnerability; I have sent a patch to correct this to the maintainer.

pop3test notes: when you run it, it will listen on port 9981 for incoming connections. Configure your email client to user localhost:9981 as your POP3 server, with usernames of ""; if the remote host isn't on port 110, you need to use "". If your username ends in, pop3test will try to run hotwayd (from a hard-coded location...). pop3test is going to be rolled out as a separate package soon, with configure files and whatnot. This is just a demonstration version. See INSTALL for instructions on setting up pop3test.

If you have any questions, comments, feature requests, or patches, feel free to contact me at .

Thanks, Josh Myer <> Logo