Winapi 应用程序如何接收WSA_IO_挂起的数据?

Winapi 应用程序如何接收WSA_IO_挂起的数据?,winapi,networking,spi,iocp,sniffer,Winapi,Networking,Spi,Iocp,Sniffer,我正在为指定的应用程序使用LSP/SPI制作一个嗅探器。但我不明白这个应用程序是如何与网络协同工作的 没有“连接”或WSA连接调用。我截获WSPRecv、WSPSend、WSPCloseSocket,但不截获WSPConnect 另一件奇怪的事-WSPRecv总是返回WSA_IO_PENDING,但lpOverlapped中的hEvent为null,lpCompletionRoutine也为null。并且不调用WSPGetOverlappedResult(WSageToOverlappedRes

我正在为指定的应用程序使用LSP/SPI制作一个嗅探器。但我不明白这个应用程序是如何与网络协同工作的

没有“连接”或WSA连接调用。我截获WSPRecv、WSPSend、WSPCloseSocket,但不截获WSPConnect

另一件奇怪的事-WSPRecv总是返回WSA_IO_PENDING,但lpOverlapped中的hEvent为null,lpCompletionRoutine也为null。并且不调用WSPGetOverlappedResult(WSageToOverlappedResult,GetOverlappedResult)和GetQueuedCompletionStatus(GetQueuedCompletionStatusEx)。我钩住了所有这些函数,但根本没有调用!此应用程序如何接收数据


你能帮我吗?它是如何工作的?我遗漏了什么?

父进程侦听连接。建立连接后,父进程将启动新的子进程来处理连接。子进程继承所连接套接字的句柄。子进程通过套接字进行通信,最终关闭套接字并退出

如果孤立地查看子进程,您将看到发送、接收和最终关闭,但没有初始连接,正如您所描述的

这是UNIX上更常见的模型,但有时在Windows上使用

至于奇怪的重叠行为,如果您查看非阻塞套接字的内部,您可能会看到这一点。非阻塞套接字是在异步套接字上实现的,但我不知道细节