Проблема с recv в многопоточности

Тема в разделе "WASM.NETWORKS", создана пользователем Kira, 24 янв 2008.

  1. boobl

    boobl New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2008
    Сообщения:
    18
    Перед киданием текста в файл надобно обязательно обнулять, ибо recv этого не делает.

    Код (Text):
    1.   string message = "GET / HTTP/1.0\r\nHost:" + domain + " \r\n\r\n\r\n"; //запрос формируется нормально
    2.   pthread_mutex_lock(&mutex);                   //мьютексы от отчаяния включены, помоему они здесь не в кассу.
    3.   char text[1500];                                      //буфер для приема
    4.   char * request = &message[0];             //тк send берет char* перевод сообщения.
    5.   //cout<<request<<endl;              //для проверки
    6.   send(sock, request, strlen(request), 0);      //посылаем запрос
    7.   int nsize;
    8.   string page;
    9.   nsize = recv(sock, text, sizeof(text) - 1, 0);        //получаем первую часть
    10.   text[nsize] = 0;
    11.   page = page + text;
    12.   if (check_page(page))                             //проверка кода ответа (200 300 301)
    13.   {
    14.     domain = create_folder(domain);                 //создается чтото типа файловой базы данных
    15.     char * ch;
    16.     domain += "index.html";
    17.     ch=&domain[0];
    18.     ofstream out(ch, ios::out);                     //поток ввода в файл
    19.     out << text;                                    //кидаем первую часть в файл
    20.     text[0] = 0;
    21.     while (nsize = recv(sock, text, sizeof(text) - 1, 0)))  //получаем ответ и сохраняем его пока не получим 0 от сервера
    22.     {
    23.         text[nsize] = 0;
    24.       out << text;
    25.     }
    26.     close(sock);
    27.     pthread_mutex_unlock (&mutex);
    28.   }