Commit 6469900e79
Changed files (2)
lib
std
os
windows
lib/std/os/windows/ws2_32.zig
@@ -2,6 +2,31 @@ usingnamespace @import("bits.zig");
pub const SOCKET = *@OpaqueType();
pub const INVALID_SOCKET = @intToPtr(SOCKET, ~@as(usize, 0));
+pub const SOCKET_ERROR = -1;
+
+pub const WSADESCRIPTION_LEN = 256;
+pub const WSASYS_STATUS_LEN = 128;
+
+pub const WSADATA = if (usize.bit_count == u64.bit_count)
+ extern struct {
+ wVersion: WORD,
+ wHighVersion: WORD,
+ iMaxSockets: u16,
+ iMaxUdpDg: u16,
+ lpVendorInfo: *u8,
+ szDescription: [WSADESCRIPTION_LEN + 1]u8,
+ szSystemStatus: [WSASYS_STATUS_LEN + 1]u8,
+ }
+else
+ extern struct {
+ wVersion: WORD,
+ wHighVersion: WORD,
+ szDescription: [WSADESCRIPTION_LEN + 1]u8,
+ szSystemStatus: [WSASYS_STATUS_LEN + 1]u8,
+ iMaxSockets: u16,
+ iMaxUdpDg: u16,
+ lpVendorInfo: *u8,
+ };
pub const MAX_PROTOCOL_CHAIN = 7;
@@ -167,6 +192,11 @@ pub const WSA_QOS_ESDMODEOBJ = 11029;
pub const WSA_QOS_ESHAPERATEOBJ = 11030;
pub const WSA_QOS_RESERVED_PETYPE = 11031;
+pub extern "ws2_32" stdcallcc fn WSAStartup(
+ wVersionRequired: WORD,
+ lpWSAData: *WSADATA,
+) c_int;
+pub extern "ws2_32" stdcallcc fn WSACleanup() c_int;
pub extern "ws2_32" stdcallcc fn WSAGetLastError() c_int;
pub extern "ws2_32" stdcallcc fn WSASocketA(
af: c_int,
lib/std/os/windows.zig
@@ -608,6 +608,24 @@ pub fn GetFileAttributesW(lpFileName: [*]const u16) GetFileAttributesError!DWORD
return rc;
}
+pub fn WSAStartup(majorVersion: u8, minorVersion: u8) !ws2_32.WSADATA {
+ var wsadata: ws2_32.WSADATA = undefined;
+ return switch (ws2_32.WSAStartup((@as(WORD, minorVersion) << 8) | majorVersion, &wsadata)) {
+ 0 => wsadata,
+ else => |err| unexpectedWSAError(err),
+ };
+}
+
+pub fn WSACleanup() !void {
+ return switch (ws2_32.WSACleanup()) {
+ 0 => {},
+ ws2_32.SOCKET_ERROR => switch (ws2_32.WSAGetLastError()) {
+ else => |err| return unexpectedWSAError(err),
+ },
+ else => unreachable,
+ };
+}
+
pub fn WSASocketW(
af: i32,
socket_type: i32,