summaryrefslogtreecommitdiff
path: root/README.md
blob: 70bfa04f69c17e50ba547606a58adef8e1da9efe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
psocksxx
========

[![GitHub release](https://img.shields.io/github/release/nukedzn/psocksxx.svg)](https://github.com/nukedzn/psocksxx/releases)
[![Build Status](https://travis-ci.org/nukedzn/psocksxx.svg)](https://travis-ci.org/nukedzn/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](http://www.gnu.org/licenses/lgpl.html)
for more details.


## The Concept

This project was started to add to the features provided by the simple
[socket-library](https://github.com/uditha-atukorala/socket-library) project,
specially socket timeouts. But rather than sticking to the same class structure
it was decided to use [stream buffers](http://gcc.gnu.org/onlinedocs/libstdc++/manual/streambufs.html)
in C++ standard library.

The inspiration to derive from std::streambuf came from the [socket++](http://www.linuxhacker.at/socketxx)
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](https://packages.debian.org/psocksxx), [Ubuntu](http://packages.ubuntu.com/psocksxx)).

	$ 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](https://github.com/nukedzn/psocksxx/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](https://github.com/nukedzn/psocksxx/tree/master/src/examples)
for more details.

### Simple Server

``` c++

// 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

``` c++
// 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](https://nukedzn.github.io/psocksxx/docs/v1.0)