Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> recv получает данные, но send возвращает SOCKET_ER, странное поведение сокетов 
V
    Опции темы
Arks
Дата 31.1.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.5.2006
Где: Барнаул

Репутация: нет
Всего: нет



Вот такой код есть:
Код

// посылаем Data и timeout
    ChannelSend cs;
    cs.timeout = timeout;
    //cs.data = d;
    cs.d1 = d.d1;
    cs.d2 = d.d2;
    cs.d3 = d.d3;
    cs.d4 = d.d4;
    buflen = (int)sizeof(ChannelSend);
    iResult = send(socket, (char*)&cs, buflen, 0);
    //if(iResult = SOCKET_ERROR)
    //{
    //    printf("Network channel: socket error on Put data send\n");
    //    printf("Error code: %d", WSAGetLastError());
    //    closesocket(socket);
    //    WSACleanup();
    //    throw new NetworkChannelException("Socket error on Put data send");
    //}


Если закоментировать (как сейчас сделано) проверку, то всё работает и здесь, и дальше. Если раскоментировать, то получим исключение, так как iResult после вызова send() равняется SOCKET_ERROR.
Самое главное, что на стороне сервера recv() отрабатывает корректно и получает данные в целости и сохранности:
Код

// получим данные
    int iResult;
    int buflen;
    ChannelSend cs;
    buflen = (int)sizeof(ChannelSend);
    iResult = recv(socket, (char*)&cs, buflen, 0);
    if(iResult == 0)
        return -1;

    // выполняем Put
    Data data(cs.d1, cs.d2, cs.d3, cs.d4);
    bool res = channel->Put(/*cs.*/data, cs.timeout);

    // пошлём ответ
    int buf = res ? 1 : 0;
    iResult = send(socket, (char*)&buf, (int)sizeof(int), 0);
    if(iResult == SOCKET_ERROR)
        return -1;

    return 1;

PM MAIL ICQ Skype MSN   Вверх
Arks
Дата 31.1.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 7.5.2006
Где: Барнаул

Репутация: нет
Всего: нет



Сообщаю - всё работает, а моим глазам пора отдохнуть: в if( iResult = SOCKET_ERROR) = надо заменить на ==.
PM MAIL ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.