From cd417b0d1fb12b857a152e8080bbe65468776351 Mon Sep 17 00:00:00 2001 From: Ben Ryan Date: Wed, 4 Jun 2025 11:13:14 +1000 Subject: [PATCH] Add windows bindings to support overlapped IO --- core/sys/windows/kernel32.odin | 6 ++++++ core/sys/windows/types.odin | 6 ++++++ core/sys/windows/ws2_32.odin | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index ed32c7a9f..5c02cecf2 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -372,6 +372,12 @@ foreign kernel32 { bInitialState: BOOL, lpName: LPCWSTR, ) -> HANDLE --- + CreateEventExW :: proc( + lpEventAttributes: LPSECURITY_ATTRIBUTES, + lpName: LPCWSTR, + dwFlags: DWORD, + dwDesiredAccess: DWORD, + ) -> HANDLE --- ResetEvent :: proc(hEvent: HANDLE) -> BOOL --- SetEvent :: proc(hEvent: HANDLE) -> BOOL --- WaitForMultipleObjects :: proc( diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index f698b63d4..92b1cb15c 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -4845,6 +4845,12 @@ SOMAXCONN :: 128 // The number of messages that can be queued in memory after SOCKET_ERROR :: -1 // Networking errors +WSA_INVALID_HANDLE :: 6 // Specified event object handle is invalid. +WSA_NOT_ENOUGH_MEMORY :: 8 // Insufficient memory available. +WSA_INVALID_PARAMETER :: 87 // One or more parameters are invalid. +WSA_OPERATION_ABORTED :: 995 // Overlapped operation aborted. +WSA_IO_INCOMPLETE :: 996 // Overlapped I/O event object not in signaled state. +WSA_IO_PENDING :: 997 // Overlapped operations will complete later. WSAEINTR :: 10004 // Call interrupted. CancelBlockingCall was called. (This is different on Linux.) WSAEACCES :: 10013 // If you try to bind a Udp socket to the broadcast address without the socket option set. WSAEFAULT :: 10014 // A pointer that was passed to a WSA function is invalid, such as a buffer size is smaller than you said it was diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin index d808bcd09..0fc427728 100644 --- a/core/sys/windows/ws2_32.odin +++ b/core/sys/windows/ws2_32.odin @@ -131,6 +131,10 @@ foreign ws2_32 { ) -> SOCKET --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaioctl) WSAIoctl :: proc(s: SOCKET, dwIoControlCode: DWORD, lpvInBuffer: rawptr, cbInBuffer: DWORD, lpvOutBuffer: rawptr, cbOutBuffer: DWORD, lpcbBytesReturned: ^DWORD, lpOverlapped: ^OVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE) -> c_int --- + // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsacreateevent) + WSACreateEvent :: proc() -> WSAEVENT --- + // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsacloseevent) + WSACloseEvent :: proc(hEvent: WSAEVENT) -> bool --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaeventselect) WSAEventSelect :: proc(s: SOCKET, hEventObject: WSAEVENT, lNetworkEvents: i32) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsawaitformultipleevents)