The ioxx library provides primitives for asynchronous I/O in C++. That kind of thing is typically useful for people who would like to implement a highly concurrent network service, i.e. an application that performs input/output simultaneously on a great number of sockets. The library's main components are a socket event dispatcher, a time event dispatcher, and an asynchronous DNS resolver. There is also a class interface to socket programming that offers those wonders of modern C++ such as exception-style error reporting, transparent resource management, type-safety, and support for custom memory allocation strategies. Ioxx is thread-safe in the sense that it is fully re-entrant. The code runs on any POSIX-compliant operating system, most notably Linux, NetBSD, Solaris, AIX, HP/UX, and Windows.
Ioxx depends mandatorily on the excellent Boost libraries. The optional asynchronous DNS resolver depends on GNU ADNS version 1.4 (or later). The reference documentation can be re-built with doxygen.
git clone git://git.sv.gnu.org/ioxx.git
configure
. Those scripts can be generated with the command autoreconf -i
if Autoconf 2.61 and Automake 1.10 (or later versions) are available.If you would like to be notified whenever a new version becomes available, subscribe to the ioxx RSS feed or ATOM log.
For the impatient: ./configure && make check && make install
Ioxx is a header-only library that does not require any compilation -- with the exception of the test suite. The standard Autoconf installation procedure is described at great length in the distributed file INSTALL
. In addition to the usual standard options, ioxx can be configured with a number of additional switches. If those options are left unspecified, ioxx tries to auto-detect whether those features are available or not. Specifying these options is usually unnecessary. A status summary will be output at the end of the configure run.
BOOST_SUFFIX
: Most systems allow linking the boost libraries under their normal names, i.e. the unit test framework can be linked as -lboost_unit_test_framework
. Other systems, however, have those libraries installed with special suffixes that denote the compiler version used to build the library. etc. On such a system, it will be necessar to assign the variable on the configure
command line, for example: BOOST_SUFFIX=-gcc34
. The boost libraries required only when building the unit tests.--enable-epoll
, --enable-epoll-pwait
: Enable support for the Linux-specific epoll
family of system calls.--enable-poll
, --enable-ppoll
: Enable support for the POSIX call poll()
and/or the non-standard extension ppoll()
.--enable-select
, --enable-pselect
: Enable support for the POSIX call select()
and/or the non-standard extension pselect()
.--enable-adns
: Enable asynchronous DNS resolving with GNU ADNS version 1.4 (or later). This might require additional -I
flags in CPPFLAGS
and -L
flags in LDFLAGS
.--enable-internal-docs
: When re-building the reference documentation, include classes that are documented as internal. The default is not to include those classes.--with-doxygen=PATH
, --with-dot=PATH
, --with-perl=PATH
: Use these flags to specify the absolute paths to the corresponding binaries. Alternatively, the variables DOXYGEN
, DOT
, and PERL
can be assigned on the configure
command-line. These options concern only the reference documentation generated with doxygen.Please submit bug reports or feature requests to the ioxx bug tracker. The library is still fairly new and I'm particularly interested in hearing about portability problems, i.e. platforms on which ioxx doesn't compile or fails the test suite.
The ioxx library is distributed under the terms of the GNU Lesser General Public License version 3 or, at your option, any later version. Ioxx is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.