Re: Запутался с функцией connect() для не блокирующих сокето
От: Michael Chelnokov Украина  
Дата: 10.09.11 12:17
Оценка: 6 (1)
Здравствуйте, s3dworld, Вы писали:

S>Если мне нужно было бы использовать модель ввода/вывода, основанную на сообщениях окна (WSAAsyncSelect()), либо же на событиях (WSAWaitForMultipleEvents()), то мне бы пришлось переводить сокет в асинхронный режим через setsockopt(),


Нет, не надо, WSAAsyncSelect сама все переводит. И не setsockopt, а ioctlsocket(FIONBIO).

S>либо сразу создавать сокет через WSASocket() с параметром WSA_FLAG_OVERLAPPED.


OVERLAPPED не имеет отношения к WSAAsyncSelect/WSAEventSelect, это не то же самое что nonblocking mode.
И флаг OVERLAPPED на сокете установлен, если ты его создаешь через обычный вызов socket, для этого не надо обязательно вызывать WSASocket(WSA_FLAG_OVERLAPPED).

S>После этого я мог бы вызвать connect() и проверить результат. Если код ошибки WSAEWOULDBLOCK, то жду когда придёт сообщение в окно, или же возникнет событие (всё зависит от выбранной модели ввода/вывода).


Да.

S>А вот если я использую модель ввода/вывода, основанную на портах завершения ввода/вывода, тогда как мне использовать функцию connect()?


Начиная с Windows XP/2003 с IOCP можно использовать ConnectEx.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.