push
[NextIRCd.git] / src / IOHandler / IOEngine_win32.c
index a5226ae792c0f16ea8f121dc66a1eff142cdbabf..ffc44e17fea86b856a163bada7614e3ef22ed046 100644 (file)
 #include "IOTimer.h"
 
 #ifdef WIN32
-
+#ifdef _WIN32_WINNT
+#undef _WIN32_WINNT
+#endif
 #define _WIN32_WINNT 0x501
-#include <windows.h>
 #include <winsock2.h>
+#include <windows.h>
 
 /* This is massively kludgy.  Unfortunately, the only performant I/O
  * multiplexer with halfway decent semantics under Windows is
@@ -65,6 +67,8 @@ static LRESULT CALLBACK engine_win32_wndproc(HWND hWnd, UINT uMsg, WPARAM wParam
                        return 0;
                case IDT_SOCKET:
                        iosock = engine_win32_get_iosock(wParam);
+                       if(!iosock)
+                               return 0;
                        events = WSAGETSELECTEVENT(lParam);
                        
                        if((events & FD_CONNECT)) {
@@ -118,7 +122,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) {