Всем доброго дня!
Пишу на 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?
Здравствуйте, s3dworld, Вы писали:
S>Собственно можно ли как-то получить этот адрес без асинхронного вызова, при уже созданном сокете таким вот образом?
S>S>entitySocket=WSASocket(_family,_type,_protocol,0,0,WSA_FLAG_OVERLAPPED);
S>
При старте программы создай сокет без WSA_FLAG_OVERLAPPED, получи адреса функций и закрой этот сокет.