Всем доброго дня,
Пишу анализатор трафа для одного приложения, ничего менять не надо, просто дампить пакеты и писать их в лог. С WSPSend конечно же все отлично.
С WSPRecv проблема начинается на overlapped сокетах, при асинхронном использовании. Все время получаю SOCKET_ERROR, lpErrno = WSA_IO_PENDING.
Пробовал различные варианты, описаные на форуме, но ничего путного не выходит. Пробовал подсовывать свой lpCompletionRoutine (что вполне бы меня устроило), но он вообще не вызывается или я получаю 10022 (WSAEINVAL). lpOverlapped->hEvent похоже не используется вообще (пробовал создавать и подсовывать в эту структуру) и конструкции типо не выходят:
if (result == SOCKET_ERROR && *lpErrno == WSA_IO_PENDING)
{
result = fOldWSPRecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno);
WaitForSingleObject(lpOverlapped->hEvent, INFINITE);
result = WSAGetOverlappedResult(s, lpOverlapped, &retBytes, FALSE, lpFlags);
OutputString("retBytes = %d\n", retBytes); //иногда вразумительный ответ
result = fOldWSPRecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno); //тут всегда WSA_IO_PENDING
}
Вообщем уже кучу всего перепробовал, но нормального варианта так и не нашел. Киданите ссылкой, кто сталкивался. Полюбому тут я такой уже сотый или тысячный с подобным вопросом =)
Примного благодарствую.