diff --git a/dll/win32/msafd/misc/dllmain.c b/dll/win32/msafd/misc/dllmain.c
index c9e443641b..3cbad8a79d 100644
--- a/dll/win32/msafd/misc/dllmain.c
+++ b/dll/win32/msafd/misc/dllmain.c
@@ -211,7 +211,7 @@ WSPSocket(int AddressFamily,
         Socket->SharedData->ServiceFlags1 = lpProtocolInfo->dwServiceFlags1;
         Socket->SharedData->ProviderFlags = lpProtocolInfo->dwProviderFlags;
         Socket->SharedData->UseSAN = FALSE;
-        Socket->SharedData->NonBlocking = FALSE; /* Sockets start blocking */
+        Socket->SharedData->NonBlocking = TRUE; /* Sockets start blocking */
         Socket->SharedData->RecvTimeout = INFINITE;
         Socket->SharedData->SendTimeout = INFINITE;
         Socket->SharedData->OobInline = FALSE;
diff --git a/dll/win32/msafd/misc/sndrcv.c b/dll/win32/msafd/misc/sndrcv.c
index 07fe8b1f1c..ace47499e3 100644
--- a/dll/win32/msafd/misc/sndrcv.c
+++ b/dll/win32/msafd/misc/sndrcv.c
@@ -292,7 +292,7 @@ WSPRecv(SOCKET Handle,
                                    0);
 
     /* Wait for completion of not overlapped */
-    if (Status == STATUS_PENDING && lpOverlapped == NULL)
+    if (Status == STATUS_PENDING && lpOverlapped == NULL && !Socket->SharedData->NonBlocking)
     {
         /* It's up to the protocol to time out recv.  We must wait
          * until the protocol decides it's had enough.
