psocksxx

A C++ wrapper for POSIX sockets

## Copyright and License

Copyright (C) 2013-2015 Uditha Atukorala.

This software library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

This software library 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. See the GNU Lesser General Public License for more details.

## The Concept

This project was started to add to the features provided by the simple socket-library project, specially socket timeouts. But rather than sticking to the same class structure it was decided to use stream buffers in C++ standard library.

The inspiration to derive from std::streambuf came from the socket++ library initially developed by Gnanasekaran Swaminathan. While the socket++ library seems to be stable and feature rich, the coding style and the lack of API documentation makes it a little difficult for the beginners.

psocksxx library attempts to borrow the concepts from socket++ and socket-library, but not the code, and create a well documented (and hopefully easy to understand) POSIX socket communication wrapper in C++. To keep the code simple and clean this project will only support POSIX sockets.

## Downloads

You can download source distributions from https://github.com/nukedzn/psocksxx/releases.

### Debian/Ubuntu packages

Please check availability for your distribution first (Debian, Ubuntu).

    $ sudo aptitude update
    $ sudo aptitude install libpsocksxx-dev

## Dependencies

- CppUnit >= 1.12.1 (for unit tests)
- Doxygen (for doxygen documentation, of course)

## Bugs and Feature Requests

Please report all bugs and feature requests under issues.

## Compiling from source

If you are using the github source then first you need to initialise autotools.

    $ libtoolize (glibtoolize in OS X)
    $ aclocal
    $ autoheader
    $ autoconf
    $ automake --add-missing (you will need automake >= 1.13)

After that you can use the usual `./configure && make`

## Usage

Please take a look at examples for more details.

### Simple Server

// tcp socket stream
psocksxx::tcpnsockstream ss;
// network address to bind to
psocksxx::nsockaddr naddr( "localhost", "21555" );
// bind and listen
ss.bind( &naddr, true );
ss.listen();
// accept a connection
psocksxx::nsockstream * css = ss.accept();

### Simple Client

// tcp socket stream
psocksxx::tcpnsockstream ss;
// connect
ss.connect( "localhost", 21555 );
// send a message
ss << "hello" << std::endl;
// receive a message
std::string msg;
ss >> msg;

## API Documentation

- v1.0