aec33ef3d83c841acd1e76330da310fa39d46631
Some checks failed
CI / build-and-analyze (push) Failing after 1m57s
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
#include "CgeNet.h"
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <stddef.h>
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
SIGPIPEto 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.
Languages
C
98%
CMake
2%