73 lines
1.6 KiB
C
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;
|
|
}
|