Sockeye

An easy-to-use, fast socket C++ library! Uses epoll on Linux, kqueue on BSD/macOS.

API Reference

sockeye::Socket

Main server class for handling TCP connections.

Constructor

explicit Socket(uint16_t port = 8080)

Methods

bool start() Initialize the server socket and event system. Returns true on success.

void run() Start the event loop. Blocks until stop() is called.

void stop() Stop the server and exit the event loop.

void on_connection(ConnectionHandler handler) Set callback for new client connections.

void on_data(DataHandler handler) Set callback for incoming data from clients.

void on_disconnect(DisconnectHandler handler) Set callback for client disconnections.

Handler Types

using ConnectionHandler = std::function<void(int client_fd)>;
using DataHandler = std::function<void(int client_fd, const char* data, size_t len)>;
using DisconnectHandler = std::function<void(int client_fd)>;

Examples

Basic Echo Server

#include "sockeye.hpp"
#include <iostream>
#include <cstring>

int main() {
	sockeye::Socket server(8080);

	server.on_connection([](int client_fd) {
		std::cout << "Client connected: " << client_fd << std::endl;
	});

	server.on_data([](int client_fd, const char* data, size_t len) {
		// Echo data back to client
		send(client_fd, data, len, 0);
	});

	server.on_disconnect([](int client_fd) {
		std::cout << "Client disconnected: " << client_fd << std::endl;
	});

	if (!server.start()) {
		std::cerr << "Failed to start server" << std::endl;
		return 1;
	}

	server.run();
	return 0;
}

HTTP-like Server

#include "sockeye.hpp"
#include <iostream>
#include <string>

int main() {
	sockeye::Socket server(8080);

	server.on_data([](int client_fd, const char* data, size_t len) {
		std::string request(data, len);

		// Simple HTTP response
		std::string response =
			"HTTP/1.1 200 OK\r\n"
			"Content-Length: 13\r\n"
			"Connection: close\r\n\r\n"
			"Hello, World!";

		send(client_fd, response.c_str(), response.length(), 0);
		close(client_fd);
	});

	if (!server.start()) {
		std::cerr << "Failed to start server" << std::endl;
		return 1;
	}

	std::cout << "Server listening on port 8080" << std::endl;
	server.run();
	return 0;
}

Graceful Shutdown

#include "sockeye.hpp"
#include <signal.h>

sockeye::Socket* server_ptr = nullptr;

void signal_handler(int signal) {
	if (server_ptr) {
		server_ptr->stop();
	}
}

int main() {
	sockeye::Socket server(8080);
	server_ptr = &server;

	signal(SIGINT, signal_handler);
	signal(SIGTERM, signal_handler);

	// Set up handlers...

	if (!server.start()) {
		return 1;
	}

	server.run();
	return 0;
}
Description
Easy-to-use C++ library for utilizing sockets.
Readme 44 KiB
Languages
C++ 100%