[IOMultiplexerV2] tidied up _IOSocket socket_flag definitions and added possibility...
[NextIRCd.git] / src / IOHandler / IOEngine_win32.c
index 6f755c2307a3ccc2cbf46a0ca5457721aa8ccdad..26ac0a64d6f484e38efeeb1112eb777d661cee18 100644 (file)
@@ -67,7 +67,14 @@ static LRESULT CALLBACK engine_win32_wndproc(HWND hWnd, UINT uMsg, WPARAM wParam
                        iosock = engine_win32_get_iosock(wParam);
                        events = WSAGETSELECTEVENT(lParam);
                        
-                       iosocket_events_callback(iosock, (events & (FD_READ | FD_ACCEPT | FD_CLOSE)) != 0, (events & (FD_WRITE | FD_CONNECT)) != 0);
+                       if((events & FD_CONNECT)) {
+                               int err;
+                               if((err = WSAGETSELECTERROR(lParam)))
+                                       iosocket_events_callback(iosock, err, 0);
+                               else
+                                       iosocket_events_callback(iosock, 0, 1);
+                       } else
+                               iosocket_events_callback(iosock, (events & (FD_READ | FD_ACCEPT | FD_CLOSE)) != 0, (events & FD_WRITE) != 0);
                        return 0;
                case WM_QUIT:
                        return 0;
@@ -111,7 +118,7 @@ static long engine_win32_events(struct _IOSocket *iosock) {
        if(iosock->socket_flags & IOSOCKETFLAG_CONNECTING)
                return FD_CONNECT;
        
-       return FD_READ | FD_CLOSE | (iosocket_wants_writes(iosock) ? FD_WRITE : 0);
+       return FD_CLOSE | (iosocket_wants_reads(iosock) ? FD_READ : 0) | (iosocket_wants_writes(iosock) ? FD_WRITE : 0);
 }
 
 static void engine_win32_update(struct _IOSocket *iosock) {