Raw source file available here .
// Written by retoor@molodetz.nl
// This source code sets up a simple server using the rnet library to handle client connections. The server waits for client connections,
// reads data, and responds with simple HTTP headers. It closes the connection if a "GET" request is received.
// The non-standard import in this code is "rnet.h".
// MIT License
#include "rnet.h"
void on_client_connect(rnet_socket_t *sock) { printf("%s connected\n", sock->name); }
void on_client_read(rnet_socket_t *sock) {
unsigned char *data = net_socket_read(sock, 4096);
if (!data)
return;
const char *http_headers = "HTTP/1.1 200 OK\r\nContent-Length: 10\r\nConnection: close\r\n\r\n";
net_socket_write(sock, (unsigned char *)http_headers, strlen(http_headers));
rnet_safe_str((char *)data, sock->bytes_received);
printf("%s: %.30s\n", sock->name, data);
net_socket_write(sock, data, strlen((char *)data));
if (!strncmp((char *)data, "GET ", 4)) {
net_socket_close(sock);
}
}
void on_client_close(rnet_socket_t *sock) { printf("%s disconnected\n", sock->name); }
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: [port].\n");
return 1;
}
for (int i = 0; i < argc; i++) {
if (strcmp(argv[i], "test") == 0) {
printf("Skipping rnet tests.\n");
return 0;
}
}
rnet_server_t *server = net_socket_serve((unsigned int)atoi(argv[1]), 10);
server->on_connect = on_client_connect;
server->on_read = on_client_read;
server->on_close = on_client_close;
while (true) {
if (net_socket_select(server)) {
printf("Handled all events.\n");
} else {
printf("No events to handle.\n");
}
}
return 0;
}