Răsfoiți Sursa

BSocket: on Windows, make every event respond to FD_CLOSE, just to be sure

ambrop7 15 ani în urmă
părinte
comite
2b5ceaa9a7
1 a modificat fișierele cu 6 adăugiri și 6 ștergeri
  1. 6 6
      system/BSocket.c

+ 6 - 6
system/BSocket.c

@@ -299,7 +299,7 @@ static void dispatch_events (BSocket *bs, int events)
 static long get_wsa_events (int sock_events)
 {
     long res = 0;
-
+    
     if ((sock_events&BSOCKET_READ)) {
         res |= FD_READ | FD_CLOSE;
     }
@@ -307,12 +307,12 @@ static long get_wsa_events (int sock_events)
         res |= FD_WRITE | FD_CLOSE;
     }
     if ((sock_events&BSOCKET_ACCEPT)) {
-        res |= FD_ACCEPT;
+        res |= FD_ACCEPT | FD_CLOSE;
     }
     if ((sock_events&BSOCKET_CONNECT)) {
-        res |= FD_CONNECT;
+        res |= FD_CONNECT | FD_CLOSE;
     }
-
+    
     return res;
 }
 
@@ -335,11 +335,11 @@ static void handle_handler (BSocket *bs)
         returned_events |= BSOCKET_WRITE;
     }
     
-    if ((bs->waitEvents&BSOCKET_ACCEPT) && (events.lNetworkEvents&FD_ACCEPT)) {
+    if ((bs->waitEvents&BSOCKET_ACCEPT) && ((events.lNetworkEvents&FD_ACCEPT) || (events.lNetworkEvents&FD_CLOSE))) {
         returned_events |= BSOCKET_ACCEPT;
     }
     
-    if ((bs->waitEvents&BSOCKET_CONNECT) && (events.lNetworkEvents&FD_CONNECT)) {
+    if ((bs->waitEvents&BSOCKET_CONNECT) && ((events.lNetworkEvents&FD_CONNECT) || (events.lNetworkEvents&FD_CLOSE))) {
         returned_events |= BSOCKET_CONNECT;
         
         // read connection attempt result