Bläddra i källkod

Add `GetAddrInfoExW`

gingerBill 3 år sedan
förälder
incheckning
6c14586fff
2 ändrade filer med 40 tillägg och 0 borttagningar
  1. 27 0
      core/sys/windows/types.odin
  2. 13 0
      core/sys/windows/ws2_32.odin

+ 27 - 0
core/sys/windows/types.odin

@@ -1566,6 +1566,33 @@ ADDRINFOA :: struct {
 	ai_next: ^ADDRINFOA,
 }
 
+PADDRINFOEXW  :: ^ADDRINFOEXW
+LPADDRINFOEXW :: ^ADDRINFOEXW
+ADDRINFOEXW :: struct {
+	ai_flags:     c_int,
+	ai_family:    c_int,
+	ai_socktype:  c_int,
+	ai_protocol:  c_int,
+	ai_addrlen:   size_t,
+	ai_canonname: wstring,
+	ai_addr:      ^sockaddr,
+	ai_blob:      rawptr,
+	ai_bloblen:   size_t,
+	ai_provider:  LPGUID,
+	ai_next:      ^ADDRINFOEXW,
+}
+
+LPLOOKUPSERVICE_COMPLETION_ROUTINE :: #type proc "stdcall" (
+	dwErrorCode: DWORD,
+	dwNumberOfBytesTransfered: DWORD,
+	lpOverlapped: LPOVERLAPPED,
+)
+
+sockaddr  :: struct {
+	sa_family: USHORT,
+	sa_data:   [14]byte,
+}
+
 sockaddr_in :: struct {
 	sin_family: ADDRESS_FAMILY,
 	sin_port: USHORT,

+ 13 - 0
core/sys/windows/ws2_32.odin

@@ -87,6 +87,19 @@ foreign ws2_32 {
 		res: ^^ADDRINFOA,
 	) -> c_int ---
 	freeaddrinfo :: proc(res: ^ADDRINFOA) ---
+	FreeAddrInfoExW :: proc(pAddrInfoEx: PADDRINFOEXW) ---
+	GetAddrInfoExW :: proc(
+		pName:               PCWSTR,
+		pServiceName:        PCWSTR,
+		dwNameSpace:         DWORD,
+		lpNspId:             LPGUID,
+		hints:               ^ADDRINFOEXW,
+		ppResult:            ^PADDRINFOEXW,
+		timeout:             ^timeval,
+		lpOverlapped:        LPOVERLAPPED,
+		lpCompletionRoutine: LPLOOKUPSERVICE_COMPLETION_ROUTINE,
+		lpHandle:            LPHANDLE) -> INT ---
+
 	select :: proc(
 		nfds: c_int,
 		readfds: ^fd_set,