vessel/tests/socket.c
2025-06-13 17:58:13 +03:00

73 lines
1.6 KiB
C

#define _POSIX_C_SOURCE 199309L
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <vessel/log.h>
#include <vessel/sock.h>
#include <vessel/main.h>
#include <vessel/stream.h>
#define HW "Hello, World!\r\n"
#define HWL 15
static volatile uint64_t meow = 0;
static Bool pre_open(SockWorker *w) {
flog_info(LOG_ALL, "New connection: %d", w->fp.fd);
return True;
}
static Bool post_open(SockWorker *w) {
struct timespec eep = { 0 };
if (Stream_writef(&w->fp, "%lu\r\n", meow++) <= 0)
return False;
eep.tv_sec = rand() % 2;
eep.tv_nsec = rand() % 200000;
nanosleep(&eep, NULL);
return True;
}
int main(void) {
SockServer s = { 0 };
SockServerHook hooks[] = HOOKS({ SockServerHookType_post_open, post_open },
{ SockServerHookType_pre_open, pre_open });
s.host = "127.0.0.1";
s.port = 8080;
s.lg = LOG_ALL;
s.threads = 12;
srand((unsigned)time(NULL));
if (!SockServer_create_generic(&s, False)) {
log_error(s.lg, "Failed to create a generic TCP server.");
return 1;
}
if (!SockServer_init(&s, SEC2TO(0.01))) {
log_error(s.lg, "Failed to create a generic TCP server.");
SockServer_destroy(&s);
return 1;
}
if (!SockServer_setup_signals(&s)) {
log_error(s.lg, "Failed to handle signals for the server.");
SockServer_destroy(&s);
return 1;
}
if (!SockServer_start(&s, hooks)) {
log_error(s.lg, "Failed to start the server.");
SockServer_destroy(&s);
return 1;
}
SockServer_destroy(&s);
return 0;
}