https://github.com/sergeyfrolov/sockethandler
Yet another c++ wrapper for sockets
https://github.com/sergeyfrolov/sockethandler
Last synced: 4 months ago
JSON representation
Yet another c++ wrapper for sockets
- Host: GitHub
- URL: https://github.com/sergeyfrolov/sockethandler
- Owner: sergeyfrolov
- License: lgpl-3.0
- Created: 2015-10-26T22:04:25.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-11-10T00:04:39.000Z (over 9 years ago)
- Last Synced: 2025-01-12T20:07:15.684Z (5 months ago)
- Language: C++
- Size: 156 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SocketHandler
Yet another c++ class wrapper for sockets.## Features
Includes meta SocketHandler, ServerSocketHandler and ClientSocketHandler.
They store and handle socket connections. Sockets are added via
acceptConnection(port) and connectSock(serv_addr, port) for server and client.
Then, you may do writeAll() or readAll() for specific socket:
serverSocketHandler[socket_descriptor].writeAll("Hello, world");
You also may addDefaultSetsockopt. (see below)## Plans
Add TLS/SSL encryption.# Usage example:
## On server:
```c++
ServerSocketHandler socketHandler(port); // e.g. port = 10001
socketHandler.bindAndListen();
// add default sockopts, if wanted
int conn_fd = socketHandler.accept_connection();
// connections are usually connected in cycle, sock descriptors are stored
if (conn_fd > 0) {
string request_string = "Hello, client!",
response_string;
ssize_t bytes_read, bytes_written;
bytes_written = socketHandler[conn_fd].writeAll(response_string);
bytes_read = socketHandler[conn_fd].readAll(request_string);
cout << response_string << endl;
socketHandler[conn_fd].disconnect();
}
```## On client:
```c++
ClientSocketHandler socketHandler();
// add default sockopts, if wanted
int conn_fd = socketHandler.connectSock(serv_host, serv_port);
// e.g. serv_host = 127.0.0.1, port = 10001
if (conn_fd > 0) {
string request_string = "Hello, server!",
response_string;
ssize_t bytes_read, bytes_written;
bytes_written = socketHandler[conn_fd].writeAll(response_string);
bytes_read = socketHandler[conn_fd].readAll(request_string);
cout << response_string << endl;
socketHandler[conn_fd].disconnect();
}
```## Examples for setsockopt:
```c++
// reuse socket(do not close connection)
int b_reuse_sock = 1;
socketHandler.addDefaultSetsockopt(SOL_SOCKET, SO_REUSEADDR, (char *) &b_reuse_sock,
sizeof(b_reuse_sock));//set 5 sec timeout for send and 10 sec timeout for recv
timeval timeout;
timeout.tv_sec = 5; // 5 sec time timeout for send
timeout.tv_usec = 0 ;
socketHandler.addDefaultSetsockopt(SOL_SOCKET, SO_SNDTIMEO, (char *) &timeout,
sizeof(timeout));timeout.tv_sec = 10; // 10 secs timeout for recv, as it could process some stuff
socketHandler.addDefaultSetsockopt(SOL_SOCKET, SO_RCVTIMEO, (char *) &timeout,
sizeof(timeout));
// you still can use generic setsockopt() to set socket-specific options
```