none
Windown Sockets 2 Запутался с функцией connect() для не блокирующих сокетов RRS feed

  • Вопрос

  • Всем доброго дня!

    Если мне нужно было бы использовать модель ввода/вывода, основанную на сообщениях окна (WSAAsyncSelect()), либо же на событиях (WSAWaitForMultipleEvents()), то мне бы пришлось переводить сокет в асинхронный режим через setsockopt(), либо сразу создавать сокет через WSASocket() с параметром WSA_FLAG_OVERLAPPED. После этого я мог бы вызвать connect() и проверить результат. Если код ошибки WSAEWOULDBLOCK, то жду когда придёт сообщение в окно, или же возникнет событие (всё зависит от выбранной модели ввода/вывода).

    А вот если я использую модель ввода/вывода, основанную на портах завершения ввода/вывода, тогда как мне использовать функцию connect()? По идее в порт завершения ввода/вывода она ничего не должна записывать, так как в ней нет параметра с указателем на WSAOVERLAPPED. Следовательно функция всегда будет блокируемой и никогда не вернёт WSAEWOULDBLOCK?

    • Перемещено Abolmasov Dmitry 12 сентября 2011 г. 12:46 (От:Веб)
    10 сентября 2011 г. 8:55

Ответы

  • Как говорится в MSDN:

    Use the select function to determine the completion of the connection request by checking to see if the socket is writeable.

    Т.е. нужно проверить с помощью функции select доступность записи в сокет


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 14 сентября 2011 г. 8:47
    12 сентября 2011 г. 12:46