Erich E. Hoover : server: Return STATUS_CANT_WAIT/ WSAEWOULDBLOCK for non-overlapped SIO_ADDRESS_LIST_CHANGE requests on non-blocking sockets.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Oct 2 09:21:49 CDT 2015


Module: wine
Branch: master
Commit: dfa73ca62678787400a27eb0d858a402aae37c47
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=dfa73ca62678787400a27eb0d858a402aae37c47

Author: Erich E. Hoover <erich.e.hoover at wine-staging.com>
Date:   Fri Feb 20 14:03:34 2015 -0700

server: Return STATUS_CANT_WAIT/WSAEWOULDBLOCK for non-overlapped SIO_ADDRESS_LIST_CHANGE requests on non-blocking sockets.

Signed-off-by: Erich E. Hoover <erich.e.hoover at wine-staging.com>

---

 server/sock.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/server/sock.c b/server/sock.c
index 67d6416..1767dea 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -546,6 +546,11 @@ obj_handle_t sock_ioctl( struct fd *fd, ioctl_code_t code, const async_data_t *a
     switch(code)
     {
     case WS_SIO_ADDRESS_LIST_CHANGE:
+        if ((sock->state & FD_WINE_NONBLOCKING) && !blocking)
+        {
+            set_error( STATUS_CANT_WAIT );
+            return 0;
+        }
         if (!(ifchange_q = sock_get_ifchange_q( sock ))) return 0;
         if (!(async = create_async( current, ifchange_q, async_data ))) return 0;
         if (blocking) wait_handle = alloc_handle( current->process, async, SYNCHRONIZE, 0 );




More information about the wine-cvs mailing list