Giallo is a C++ library for asynchronous network programming, based on proactor style notification, independent of underlying OS demultiplexing methods. The aim is to get this accepted into Boost.
Status
Design
The design is split into levels.
At the lowest level are the socket and named pipe classes, which provide typesafe platform independent wrappers over the system functions. They hide all system dependent includes. This is a very low level interface, and does not carry any state info on what has happened to the socket, whether it is connected, etc. They do however use the concept of Synchronisation (blocking, non-blocking, asynch), and concept of Protocol, Address and Endpoint (a protocol, address tuple). Errors are translated to standardised, platform independent error codes. Other handling is defered to the application pattern classes.
Also at the lowest level are object wrappers around operating demultiplexer facilities. At the moment these exist for select (win32/linux), completion ports (win32), and POSIX aio (linux). There is no attempt to simulate what is not natively available.
Building on the demultiplexer classes are the Reactor and Proactor classes, that delegate their implementation to a bridge class. The bridge class implements the proactor or reactor using a single demultiplexer facility (eg, proactor_completion_port implements a proactor using completion ports, and can be used as proactor<proactor_completion_port>)
The socket connector, acceptor and connection classes provide proactor type event notification, using a (compile time) specified demultiplexer (proactor or reactor). User code is independent of the type of demultiplexer.
The socket and named_pipe also provide connection, connector, and acceptor classes with identical interfaces, so they can be used directly, or through the generic net connection, connector and acceptor classes (not yet in CVS).
Documentation beginnings (very much a work in progress).