aboutsummaryrefslogtreecommitdiff
path: root/core/sys
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-04-06 16:59:07 +0100
committergingerBill <bill@gingerbill.org>2024-04-06 16:59:07 +0100
commit83d3bc74b07eeffc2339a39540aac3b4a99aa3e5 (patch)
treeb1546a3793d14f4f4404c77bc1a1dabdbfda98e2 /core/sys
parentfbf01543d1762875d9607f5b4dbd56a8c6f3aa2e (diff)
parent8a98ee800a74567af8ad29451ce5800b732a058c (diff)
Merge branch 'master' of https://github.com/odin-lang/Odin
Diffstat (limited to 'core/sys')
-rw-r--r--core/sys/windows/kernel32.odin5
-rw-r--r--core/sys/windows/ws2_32.odin57
2 files changed, 47 insertions, 15 deletions
diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin
index 952d5bb31..10cc80041 100644
--- a/core/sys/windows/kernel32.odin
+++ b/core/sys/windows/kernel32.odin
@@ -324,6 +324,7 @@ foreign kernel32 {
lpName: LPCWSTR,
) -> HANDLE ---
ResetEvent :: proc(hEvent: HANDLE) -> BOOL ---
+ SetEvent :: proc(hEvent: HANDLE) -> BOOL ---
WaitForMultipleObjects :: proc(
nCount: DWORD,
lpHandles: ^HANDLE,
@@ -545,6 +546,10 @@ FILE_MAP_RESERVE :: DWORD(0x80000000)
FILE_MAP_TARGETS_INVALID :: DWORD(0x40000000)
FILE_MAP_LARGE_PAGES :: DWORD(0x20000000)
+// Flags for `SetFileCompletionNotificationModes`.
+FILE_SKIP_COMPLETION_PORT_ON_SUCCESS :: 0x1
+FILE_SKIP_SET_EVENT_ON_HANDLE :: 0x2
+
PAGE_NOACCESS :: 0x01
PAGE_READONLY :: 0x02
PAGE_READWRITE :: 0x04
diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin
index c60a21a36..e9bf8abc9 100644
--- a/core/sys/windows/ws2_32.odin
+++ b/core/sys/windows/ws2_32.odin
@@ -2,12 +2,12 @@
package sys_windows
// Define flags to be used with the WSAAsyncSelect() call.
-FD_READ :: 0x01
-FD_WRITE :: 0x02
-FD_OOB :: 0x04
-FD_ACCEPT :: 0x08
-FD_CONNECT :: 0x10
-FD_CLOSE :: 0x20
+FD_READ :: 0x01
+FD_WRITE :: 0x02
+FD_OOB :: 0x04
+FD_ACCEPT :: 0x08
+FD_CONNECT :: 0x10
+FD_CLOSE :: 0x20
FD_MAX_EVENTS :: 10
INADDR_LOOPBACK :: 0x7f000001
@@ -24,10 +24,10 @@ POLLERR :: 0x0001
POLLHUP :: 0x0002
POLLNVAL :: 0x0004
-WSA_POLLFD::struct{
- fd:SOCKET,
- events:c_short,
- revents:c_short,
+WSA_POLLFD :: struct{
+ fd: SOCKET,
+ events: c_short,
+ revents: c_short,
}
WSANETWORKEVENTS :: struct {
@@ -37,16 +37,43 @@ WSANETWORKEVENTS :: struct {
WSAEVENT :: HANDLE
-WSAID_ACCEPTEX :: GUID{0xb5367df1, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
+WSAID_ACCEPTEX :: GUID{0xb5367df1, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
WSAID_GETACCEPTEXSOCKADDRS :: GUID{0xb5367df2, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}}
+WSAID_CONNECTX :: GUID{0x25a207b9, 0xddf3, 0x4660, {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}}
+
SIO_GET_EXTENSION_FUNCTION_POINTER :: IOC_INOUT | IOC_WS2 | 6
-IOC_OUT :: 0x40000000
-IOC_IN :: 0x80000000
+
+IOC_OUT :: 0x40000000
+IOC_IN :: 0x80000000
IOC_INOUT :: (IOC_IN | IOC_OUT)
-IOC_WS2 :: 0x08000000
+IOC_WS2 :: 0x08000000
+
+SO_UPDATE_ACCEPT_CONTEXT :: 28683
+
+LPFN_CONNECTEX :: #type proc "system" (
+ s: SOCKET,
+ sockaddr: ^SOCKADDR_STORAGE_LH,
+ namelen: c_int,
+ lpSendBuffer: PVOID,
+ dwSendDataLength: DWORD,
+ lpdwBytesSent: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+) -> BOOL
+
+LPFN_ACCEPTEX :: #type proc "system" (
+ sListenSocket: SOCKET,
+ sAcceptSocket: SOCKET,
+ lpOutputBuffer: PVOID,
+ dwReceiveDataLength: DWORD,
+ dwLocalAddressLength: DWORD,
+ dwRemoteAddressLength: DWORD,
+ lpdwBytesReceived: LPDWORD,
+ lpOverlapped: LPOVERLAPPED,
+) -> BOOL
+
/*
Example Load:
- load_accept_ex :: proc(listener: SOCKET, fn_acceptex: rawptr) {
+ load_accept_ex :: proc(listener: SOCKET, fn_acceptex: ^LPFN_ACCEPTEX) {
bytes: u32
guid_accept_ex := WSAID_ACCEPTEX
rc := WSAIoctl(listener, SIO_GET_EXTENSION_FUNCTION_POINTER, &guid_accept_ex, size_of(guid_accept_ex),