WSAEventSelect
От: avesus Россия  
Дата: 29.01.09 17:17
Оценка:
Клиентское приложение:
1 — Создаём сокет функцией socket().

2 — Соединяемся с сервером функцией connect().

3 — Вызываем WSAEventSelect() с единственным флагом FD_READ.

4 — Отправляем пакет (2048 байт) на сервер функцией send()

5 — Вызываем WaitForSingleObject() для события, ассоциированного с сокетом в п.(3)

6 — Получаем event, вызываем recv()

Вот незадача: recv() возвращает WSAEWOULDBLOCK, хотя хочется (и ожидается!), чтобы она блокировалась и ВЕРНУЛА
пришедшие данные.

Вопрос: почему recv() в данной ситуации не блокируется? Что не так делаем?
wsaeventselect winsock send recv socket connect waitforsingleobject
Re: WSAEventSelect
От: TarasCo  
Дата: 30.01.09 10:38
Оценка:
A>Вопрос: почему recv() в данной ситуации не блокируется? Что не так делаем?

WSAEventSelect — переводит сокет в неблокирующий режим. Это пишут в классике, пишут в календарях. Почему у вас ф. не прочла данные, хотя взведено события о присутствии данных — это вопрос отдельный, похоже код у вас криво написан. Возможностей много: например, событие вы создали через WSACreateEvent, а ф. эта создает событие с ручным сбросом. Если вы его разок поюзали, надо не забыть перед вызовом WaitForSingleObject его сбросить в несигнальное состояние.
Да пребудет с тобою сила
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.