From 45e0bc2ff4c5dc8ffe2a1226804a9a387557a6fd Mon Sep 17 00:00:00 2001 From: Erich Hoover Date: Sat, 8 May 2010 16:13:53 -0600 Subject: ws2_32: Ensure Async WSARecv does not wake up on packets with an interface mismatch. --- dlls/ws2_32/socket.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 8647c8c..a3026df 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -1574,6 +1574,17 @@ static NTSTATUS WS2_async_recv( void* user, IO_STATUS_BLOCK* iosb, NTSTATUS stat if ((status = wine_server_handle_to_fd( wsa->hSocket, FILE_READ_DATA, &fd, NULL ) )) break; +#ifdef USE_IP_PKTINFO_FILTER + /* Check for packets that do not match the IP_PKTINFO filter */ + if (WS2_pktinfo_check_mismatch(HANDLE2SOCKET(wsa->hSocket), fd)) + { + WARN("Packet not destined for this interface, thrown away.\n"); + wine_server_release_fd( wsa->hSocket, fd ); + status = STATUS_PENDING; + _enable_event( wsa->hSocket, FD_READ, 0, 0 ); + break; + } +#endif result = WS2_recv( fd, wsa ); wine_server_release_fd( wsa->hSocket, fd ); if (result >= 0) -- 1.7.0.4