# CgeNet - Network Access Library for C A lightweight, dependency‑free C library providing a consistent interface for socket operations across POSIX platforms. The library abstracts the low‑level socket API and offers a unified, easy‑to‑use set of functions for creating, configuring, and using TCP/UDP sockets. ## Features - Cross‑platform support (Linux, macOS, Windows) - IPv4 and IPv6 address handling - TCP and UDP socket types - Non‑blocking and blocking mode control - Simple polling interface for readable / writable events - Comprehensive error handling with explicit error codes - Context pointer attached to each socket for user data - No dynamic memory allocation required by the user (library manages its own resources) ## Usage Example ```c #include "CgeNet.h" #include #include #include #include int main(void) { int result; #ifdef SIGPIPE signal(SIGPIPE, SIG_IGN); #endif if (!CgeNetInit()) { fprintf(stderr, "Failed to initialize network"); return 1; } CgeNetSocket *sock = CgeNetOpen(CGE_NET_IPV4, CGE_NET_TCP, &result); if (!sock) { fprintf(stderr, "Failed to open socket: %d\n", result); CgeNetCleanup(); return 1; } CgeNetAddr addr; if (!CgeNetAddrFromStr("127.0.0.1", 8080, &addr)) { fprintf(stderr, "Invalid address\n"); CgeNetClose(sock); CgeNetCleanup(); return 1; } if (!CgeNetConnect(sock, &addr)) { fprintf(stderr, "Connect failed: %d\n", CgeNetErrorCode(sock)); CgeNetClose(sock); CgeNetCleanup(); return 1; } const char *msg = "Hello, server!"; size_t written; if (!CgeNetWrite(sock, msg, strlen(msg), &written)) { fprintf(stderr, "Write failed: %d\n", CgeNetErrorCode(sock)); CgeNetClose(sock); CgeNetCleanup(); return 1; } char buffer[256]; size_t actual; if (CgeNetRead(sock, buffer, sizeof(buffer) - 1, &actual)) { buffer[actual] = '\0'; printf("Received: %s\n", buffer); } CgeNetClose(sock); CgeNetCleanup(); return 0; } ``` ## Build Systems - **CMake**: supports Linux, macOS, Windows (MSVC, MinGW) - **Makefile.posix**: for GCC/Clang on POSIX systems - **Makefile.mingw**: for MinGW on Windows - **Makefile.win32**: for MSVC with NMake Builds a static library. No shared library or external dependencies ## Portability - **Standard compliance**: written in C89 + `stdint.h` - **No external dependencies**: only standard C and system socket headers and libraries are used - **Signal handling**: Users of the library should ignore `SIGPIPE` to prevent the process from being terminated when writing to a closed socket. This can be done once in the application, e.g. `signal(SIGPIPE, SIG_IGN);` ## License 0BSD - a permissive license with no attribution required.