static void server_sigusr1_handler(int sig) { int socket = server_create_socket(server.session_name); if (socket != -1) { if (server.socket) close(server.socket); server.socket = socket; } }
void server_start(unsigned short port, int * server_socket_fd, list_node * question_pool, list_node * results) { //region Initialize/declare variables struct sockaddr_in server = server_create_sin(port); int server_fd = server_create_socket(); *server_socket_fd = server_fd; server_listen(server_fd, &server); struct sockaddr_in client_addr; int client_socket_fd; socklen_t client_socket_len = sizeof(struct sockaddr_in); //endregion //region Listen and handle connections in new threads printf("Listening for connections on port %d...\n", port); while ((client_socket_fd = accept(server_fd, (struct sockaddr *) &client_addr, &client_socket_len))) { client_handler_data_holder * holder = create_holder(client_socket_fd, &client_addr, question_pool, results); //region Log connection { char ip_str[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &client_addr.sin_addr, ip_str, INET_ADDRSTRLEN); printf("Client (%s) connected\n", ip_str); } //endregion pthread_t thread; int res = pthread_create(&thread, NULL, handle_connection, holder); if (res < 0) { perror("Could not create client handler thread"); return; } pthread_detach(thread); } //endregion }