#include #include #include #include #include #include #include // dont use stdio in these volatile sig_atomic_t running = 1; void sig_int_handler(int num) { running = 0; } void on_message(struct Server* server, char message[], ssize_t amountRecv, int socketFD) { if (amountRecv > 0) { printf("%s\n", message); broadcast(server,socketFD,message); //this calls mutex lock and unlock on server->list_lock } } int main(int argc, char* argv[]) { if (argc < 2) { fprintf(stderr, "arg1 must be set for port\n"); exit(-1); } int port = atoi(argv[1]); if (port == 0) { fprintf(stderr, "port must not be 0\n"); exit(-1); } struct Server server = server_constructor(AF_INET, SOCK_STREAM, 0, INADDR_ANY, port, 10); server.on_message = on_message; launch_socket(&server); struct sigaction act = { 0 }; act.sa_handler = &sig_int_handler; sigaction(SIGINT, &act, NULL); while (running) { pause(); } int shut_err = server_close_socket(&server); printf("shutdown with %d\n", shut_err); return 0; }