
Hi, I have been following this thread with interest, and at this point I think it might be worth jumping in and mentioning an experimental C++ networking library I have been developing over the past six months or so: http://www.tenermerx.com/programming/cpp/asio/asio-0.1.5.tar.gz I chose to "unify" the different types of resources behind an asynchronous interface (similar in some respects to the boost net prototypes) in addition to supporting blocking calls. Currently the library supports sockets and timers, although I do plan to extend this. It does not present a non-blocking interface through the external API, but it does use select internally for its non-Win32 implementation. Since my hypothesis is that I should be able to write portable, decently performing, network apps using only asynchronous calls, I have tried to make it straightforward to integrate non-asynchronous APIs into the event dispatching framework. I also attempt to obviate the need for directly using mutexes and condition variables in "application code" through a few simple rules for delivering the events. However I haven't road tested these concepts in a large real-world app yet, so I can't say for sure ;) The core IO demultiplexing concepts came from the work of my former colleague Alex Libman in developing a "portable Proactor framework" for ACE (see http://www.terabit.com.au). This is a Proactor that can use select if no more appropriate OS mechanism is available. I mention this because Alex has had great success integrating support for a range of i/o mechanisms, such as kqueue, Win32 IOCP, AIO on Sun, /dev/poll and RT signals, to try and use the best one for each platform but present a consistent interface. I am using the library as an experimental platform for a whole bunch of other ideas, but I'll save them for anyone who's actually interested :) Cheers, Chris