Здравствуйте, 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.