From: "Erich E. Hoover" Subject: [PATCH 6/6] ws2_32: Implement SIO_ADDRESS_LIST_CHANGE with NotifyAddrChange. Message-Id: Date: Mon, 26 Nov 2012 15:49:15 -0700 This patch fixes an issue where Silverlight loops forever (on some websites) continually querying the list of interfaces. On some websites this is just an annoyance, but for others this completely locks up the interface. By implementing this feature with NotifyAddrChange this resolves the problem from a user perspective (Silverlight won't lockup), but since NotifyAddrChange is not yet implemented the overlapped operation will not be triggered if the interface list actually changes. From 05fc9c365b8c5099097f8d3f1ed8098b687751a1 Mon Sep 17 00:00:00 2001 From: Erich Hoover Date: Mon, 26 Nov 2012 15:37:46 -0700 Subject: ws2_32: Implement SIO_ADDRESS_LIST_CHANGE with NotifyAddrChange. --- dlls/ws2_32/socket.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index ceda75b..95222a1 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -3386,10 +3386,18 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID } case WS_SIO_ADDRESS_LIST_CHANGE: - FIXME("-> SIO_ADDRESS_LIST_CHANGE request: stub\n"); - /* FIXME: error and return code depend on whether socket was created - * with WSA_FLAG_OVERLAPPED, but there is no easy way to get this */ + { + HANDLE handle; + + TRACE("-> SIO_ADDRESS_LIST_CHANGE request\n"); + + if (overlapped || _is_blocking(s)) + status = NotifyAddrChange(&handle, overlapped); + else + status = WSAEWOULDBLOCK; + overlapped = NULL; /* managed by NotifyAddrChange */ break; + } case WS_SIO_ADDRESS_LIST_QUERY: { -- 1.7.9.5