Я использую IcmpSendEcho2 для отправки эхо-запроса ICMP хосту, который я хотел бы проверить.Однако мне нужно обрабатывать ответ асинхронно в отдельном потоке получателя.
Для этого я создаю новый дескриптор события Windows (CreateEvent
) для каждого отправляемого запроса.Получающий поток будет уведомлен и ожидает входящих ответов, используя WaitForMultipleObjects
.
. Эта система уведомлений о событиях работает нормально, но я не могу заставить IcmpSendEcho2
быть вызванным асинхронно.В MSDN говорится, что
Функция IcmpSendEcho2 вызывается асинхронно, если указаны параметры ApcRoutine или Event.
Я указываю параметр Event , но вызывающий поток по-прежнему заблокирован до тех пор, пока не будет получен ответ или не пройдет время Timeout .Я ожидал бы, что метод немедленно возвращается, и предоставленное событие получает сигнал, как только приходит ответ или истекло время ожидания.По крайней мере, я понимаю «асинхронный».
Это мой вызов функции, предоставленные параметры действительны:
dwResult = IcmpSendEcho2(
icmpFileHandle,
eventHandle,
NULL, //no apcRoutine
NULL, //no apcContext
((sockaddr_in*)addrInfo->ai_addr)->sin_addr.S_un.S_addr,
&requestData,
sizeof(requestData),
&requestOptions,
&icmp4ReplyBuffer,
sizeof(icmp4ReplyBuffer),
30000);
Имеет ли MSDN другое понимание «асинхронного», или я что-то не так делаю?