示例#1
0
文件: server.c 项目: eworm-de/abduco
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;
	}
}
示例#2
0
文件: utils.c 项目: ivkos/cquiz
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
}