authorgravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-11-14 14:37:08+11:00
committergravatar for quae@daurnimator.comdaurnimator <quae@daurnimator.com> 2019-11-15 10:31:47+11:00
log6469900e79369f5ff7539501767842dc6922f887
treef759ae90b93385ee5389fbb9968cdb8385e3d327
parent4cf535a01b06c301239fb888dbdf87831c568867
signaturelock-open Commit is signed but in an unrecognized format.

std: add WSAStartup and WSACleanup for windows


2 files changed, 48 insertions(+), 0 deletions(-)

lib/std/os/windows.zig+18
......@@ -608,6 +608,24 @@ pub fn GetFileAttributesW(lpFileName: [*]const u16) GetFileAttributesError!DWORD
608608 return rc;
609609}
610610
611pub fn WSAStartup(majorVersion: u8, minorVersion: u8) !ws2_32.WSADATA {
612 var wsadata: ws2_32.WSADATA = undefined;
613 return switch (ws2_32.WSAStartup((@as(WORD, minorVersion) << 8) | majorVersion, &wsadata)) {
614 0 => wsadata,
615 else => |err| unexpectedWSAError(err),
616 };
617}
618
619pub fn WSACleanup() !void {
620 return switch (ws2_32.WSACleanup()) {
621 0 => {},
622 ws2_32.SOCKET_ERROR => switch (ws2_32.WSAGetLastError()) {
623 else => |err| return unexpectedWSAError(err),
624 },
625 else => unreachable,
626 };
627}
628
611629pub fn WSASocketW(
612630 af: i32,
613631 socket_type: i32,
lib/std/os/windows/ws2_32.zig+30
......@@ -2,6 +2,31 @@ usingnamespace @import("bits.zig");
22
33pub const SOCKET = *@OpaqueType();
44pub const INVALID_SOCKET = @intToPtr(SOCKET, ~@as(usize, 0));
5pub const SOCKET_ERROR = -1;
6
7pub const WSADESCRIPTION_LEN = 256;
8pub const WSASYS_STATUS_LEN = 128;
9
10pub const WSADATA = if (usize.bit_count == u64.bit_count)
11 extern struct {
12 wVersion: WORD,
13 wHighVersion: WORD,
14 iMaxSockets: u16,
15 iMaxUdpDg: u16,
16 lpVendorInfo: *u8,
17 szDescription: [WSADESCRIPTION_LEN + 1]u8,
18 szSystemStatus: [WSASYS_STATUS_LEN + 1]u8,
19 }
20else
21 extern struct {
22 wVersion: WORD,
23 wHighVersion: WORD,
24 szDescription: [WSADESCRIPTION_LEN + 1]u8,
25 szSystemStatus: [WSASYS_STATUS_LEN + 1]u8,
26 iMaxSockets: u16,
27 iMaxUdpDg: u16,
28 lpVendorInfo: *u8,
29 };
530
631pub const MAX_PROTOCOL_CHAIN = 7;
732
......@@ -167,6 +192,11 @@ pub const WSA_QOS_ESDMODEOBJ = 11029;
167192pub const WSA_QOS_ESHAPERATEOBJ = 11030;
168193pub const WSA_QOS_RESERVED_PETYPE = 11031;
169194
195pub extern "ws2_32" stdcallcc fn WSAStartup(
196 wVersionRequired: WORD,
197 lpWSAData: *WSADATA,
198) c_int;
199pub extern "ws2_32" stdcallcc fn WSACleanup() c_int;
170200pub extern "ws2_32" stdcallcc fn WSAGetLastError() c_int;
171201pub extern "ws2_32" stdcallcc fn WSASocketA(
172202 af: c_int,