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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подскажите с WSACreateEvent, подскажите с WSACreateEvent 
:(
    Опции темы
hawk3500
Дата 18.1.2012, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Здравствуйте.
Пишу клиент серверное приложение.
Передача данных работает корректно , в общем приложение вело себя замечательно.
Но после того как я применил вот такую конструкцию к сокету после ацепта:
Код

    WSAEVENT dZ=WSACreateEvent();
    if(WSAEventSelect(SockII,dZ,FD_CLOSE)==SOCKET_ERROR )
              {
                ...............
              }


в цикле где я принимаю сообщение:
Код

while(RecvDataLenght<PackedSize)
{
    TMP_LEN_RECV=recv(READY_READ_SOCKET.fd_array[fd],(char *)&CommingArray[RecvDataLenght],PackedSize-RecvDataLenght,0);
    if(TMP_LEN_RECV<0)
    {
        DWORD HH=WSAGetLastError();
        //10035

    }
             RecvDataLenght+=TMP_LEN_RECV;
}

стала возникать ошибка с кодом:10035.
Кто в курсе, подскажите , что за причина может быть и как её разрешить.
Использую блокируемые сокеты.
Заранее благодарен.
С уважением,
HAWK3500.

Добавлено через 11 минут и 14 секунд
Извениете.Не досмотрел.
Разобрался)

The WSAAsyncSelect and WSAEventSelect functions automatically set a socket to nonblocking mode. If WSAAsyncSelect or WSAEventSelect has been issued on a socket, then any attempt to use ioctlsocket to set the socket back to blocking mode will fail with WSAEINVAL.

To set the socket back to blocking mode, an application must first disable WSAAsyncSelect by calling WSAAsyncSelect with the lEvent parameter equal to zero, or disable WSAEventSelect by calling WSAEventSelect with the lNetworkEvents parameter equal to zero.




--------------------
воин dzen'a
PM MAIL   Вверх
boostcoder
Дата 18.1.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



сорри за оффтоп, но скажи: почему бы не использовать какую-то специализированную либу для работы с сетью? asio/poco к примеру.
PM WWW   Вверх
hawk3500
Дата 18.1.2012, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я покачто осваиваю как писать клиент сервера.
Просто возникла надобность вот и пишу)
Да и не оффтоп, не так радужно покачто дело обстоит


Код

                           WSAEVENT dZ=WSACreateEvent();
        int miniTMP=WSAEventSelect(SockII,dZ,FD_CLOSE);
        unsigned long ul=0;
        int result;
        result=ioctlsocket(SockII,FIONBIO,(unsigned long *)&ul);
        DWORD Err=WSAGetLastError();


WSAGetLastError возвращает WSAEINVAL.
Можете пожалуйста подсказать , из-за чего это возможно?
--------------------
воин dzen'a
PM MAIL   Вверх
boostcoder
Дата 18.1.2012, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(hawk3500 @  18.1.2012,  12:52 Найти цитируемый пост)
WSAGetLastError возвращает WSAEINVAL.
Можете пожалуйста подсказать , из-за чего это возможно?

а сокет валидный?

Цитата(hawk3500 @  18.1.2012,  12:52 Найти цитируемый пост)
Я покачто осваиваю как писать клиент сервера.

ну а asio/poco чем не подходят? я на это как бы и намекаю.

Добавлено через 38 секунд
к тому же, в WSA сокетами я не работал. BSD сокеты знаю.
PM WWW   Вверх
feodorv
Дата 19.1.2012, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(hawk3500 @  18.1.2012,  12:52 Найти цитируемый пост)
Можете пожалуйста подсказать , из-за чего это возможно? 

Гм. Думаю, что нельзя таким образом вернуть сокет в блокируемое состояние, не разорвав его связь с событием.


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Олег2005
Дата 20.1.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

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



Цитата(hawk3500 @  18.1.2012,  11:52 Найти цитируемый пост)
 result=ioctlsocket(SockII,FIONBIO,(unsigned long *)&ul);

Зачем эта конструкция?
Т.е. я так понимаю, вы пытаетесь вернуть сокет из неблокирующего - в блок?
Зачем?
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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