#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() в одной и той же области (в вашем случае, основную функцию). Это позволит избежать неприятных проблем с памятью в ваших будущих программах