Librascal is a C/C++ library for asynchronous networking. It is a networking stack abstraction library which simplifies writing portable and scalable applications. It can be used with various threading models.

The library supports TCP and UDP protocols, basic DNS resolution and fully supports service discovery. It implements buffered data flow, has helper functions for processing text based protocols and several helper classes for C++. Many options, such as timeouts, retry counters and the list of DNS servers can be adjusted at runtime.

Currently there are two versions of the library: one uses BSD sockets and is available to all Unices, the other is a WinNT specific port which uses IOCP.

Using the library

To use the library an application must include the rascal.h header file and link against librascal, a shared library (static linking is not supported and such support is not planned). Additional information is available in the documentation.


The library has no external dependencies except for the standard system libraries. To install it, compile the source code then type make install. There are precompiled binaries for Windows (dll) and a Mac OS X framework.

Download source code or binaries.


The library is a free software distributed under the BSD license.

Future plans

Most efforts are expected to be thrown at developing more platform-specific code to use kqueue, epoll and so forth.

Similar works

If you seek for adding support for SRV records to an existing application that uses standard socket functions, you may find libsrv inetersting. The library requires almost no changes to be made and provides SRV-aware functions similar to connect and accept.