2013-04-08 2 views
0

Я написал программу сервера, которая имеет два потока. Один поток получает данные от клиента, а другой поток отправляет данные клиенту. Оба потока состоят из бесконечного цикла для отправки и приема данных.Ошибка сегментации в потоке

Моя проблема заключается в том, что сервер принимает соединение и создает поток для отправки данных, но я получаю ошибку сегментации, и сервер завершается. Зачем?

код представляемого резьбы:

void *send_data(void *num) 
{ 
    int *sock_s=(int *) num; 
    int sock=*sock_s; 
    char msg[50]; 
    while(1) 
    { 
     fgets(msg,50,stdin); 
     printf("sending data"); 
     if(strcmp(msg,"exit")==0) 
     { 
      break; 
     } 
     send(sock,msg,sizeof(msg),0); 
    } 
    send(sock,msg,strlen(msg),0); 
} 

выше поток создается:

status_s=pthread_create(&thread_s,NULL,send_data,(void *)client_sock); 
+1

что тип данных client_sock? –

ответ

3

Вы передаете в гнезде клиента, а не указатель на сокет клиента. Вы обрабатываете num как указатель, поэтому вы пытаетесь «читать» с адреса памяти, который, вероятно, имеет значение 3 или 4 или 5 (идентификатор сокета, индекс в таблице дескриптора файла) ... и это нарушение памяти.

Это должно быть ...

void *send_data(void *num) 
{ 
    int sock = (int)num; 
    ... 
Смежные вопросы