Тонкости функции WSAIoctl()
От: s3dworld Россия  
Дата: 05.10.11 10:27
Оценка:
Всем доброго дня!

Пишу на C++ под WinSock 2. Решил асинхронно подключиться клиентом, но для начала нужно получить адрес функции. Делаю так:


LPFN_CONNECTEX lpfnConnectEx=0;
GUID guidConnectEx=WSAID_CONNECTEX;
DWORD returnedBytes=0;

if(WSAIoctl(
    entitySocket,
    SIO_GET_EXTENSION_FUNCTION_POINTER,
    &guidConnectEx,
    sizeof(guidConnectEx),
    &lpfnConnectEx,
    sizeof(lpfnConnectEx),
    &returnedBytes,
    0,
    0)==SOCKET_ERROR) return WSAGetLastError();


Но тут меня осенила возможная ошибка — WSA_IO_PENDING. То есть это ещё надо код писать так, чтобы уже прослушивать порт и синхронизировать когда я всё таки получу этот адрес функции (например в потоке, который извлекает пакеты из порта, сбросить какое-то событие при завершение текущей операции получения адреса, а в этой функции ожидать это события). Собственно можно ли как-то получить этот адрес без асинхронного вызова, при уже созданном сокете таким вот образом?


entitySocket=WSASocket(_family,_type,_protocol,0,0,WSA_FLAG_OVERLAPPED);


И насколько ли хорошим будет вызывать в бесконечном цикле функцию WSAIoctl() с неким интервалом в миллисекундах, при возвращении ей кода ошибки WSAEWOULDBLOCK?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.