многопоточный сервер хранит сообщения от клиентов и печатает их через x секунд

#c #multithreading #networking #server

#c #многопоточность #сеть #сервер

Вопрос:

Я пытаюсь создать сервер, который прослушивает сообщения от клиентов в потоке и через x секунд закрывает основной поток и печатает сообщения от всех клиентов из основного потока. Можете ли вы сказать мне, что я делаю не так?

main()

 /*Accept connection and open thread for every connection*/
while(1) 
{
    printf("Waiting for conections n");

     /*The accept call blocks until a connection is found*/
    check_return((client_sok =
                    accept(server_sok, (struct sockaddr *)amp;serv_addr,  
                    (socklen_t*)amp;len_serv_addr)), "Server: Accept error");

    pthread_t t;
    int *pclient = malloc(sizeof(int));
    *pclient = client_sok;
    
    pthread_create(amp;t, NULL, client_connection, pclient);
    sleep(10);
    /* print received messages */
    if (total_messages)
    {
        printf("Server: n%sn", total_messages);
        free(total_messages);
        total_messages = NULL;
    }
    else
    {
        printf("Server: No received messagesn");
    }
  

функция потока

 void * client_connection(void * client_socket )
{
        printf("Threadingn");
        int new_client_sok = *((int*)client_socket);
        free(client_socket);
        char buffer[BUFLEN];

        check_return(read(new_client_sok, message_client, BUFLEN),"Server: Error reading msg");
        
        pthread_mutex_lock(amp;lock);  
        char *message = malloc(sizeof(message_client));
        strcpy(message, "Server:");
        strcat(message, message_client);
        strcpy(buffer,message);
        free(message);
        printf("%sn", message);
        append_message(buffer);
        pthread_mutex_unlock(amp;lock);
       
        check_return(send(new_client_sok, ACK, strlen(ACK) 1, 0),"Server: Error sending msg");
        close(new_client_sok);
        pthread_exit(NULL);

}
  

Комментарии:

1. В этом коде есть несколько проблем, но в чем проблема, которую вы наблюдаете?

2. привет, прежде всего, попытайтесь объяснить проблему, с которой вы столкнулись. Для нас, читателей, трудно отлаживать, если мы не знаем, что не работает. Вашему вопросу не хватает ясности, и я не понимаю, что вы пытаетесь сделать с этим кодом. Также в качестве дополнительного примечания рекомендуется использовать malloc() и free() в одной и той же области (в вашем случае, основную функцию). Это позволит избежать неприятных проблем с памятью в ваших будущих программах