| author | |
| committer | |
| log | f5ff36271bce54eaec6f20cdff4fa4efb833c0d4 |
| tree | 8773174d52c67f23b723a1f59a437fc6c6d52b58 |
| parent | 0fb1388031ec98af77fe5e0ae8459c983010d1a8 |
| parent | 4e0c2ed443a0c13030decf8a9d53aff28f415005 |
| signature |
2 files changed, 38 insertions(+), 10 deletions(-)
lib/std/net.zig+22-8| ... | ... | @@ -29,16 +29,30 @@ pub const Address = struct { |
| 29 | 29 | //pub const localhost = initIp4(parseIp4("127.0.0.1") catch unreachable, 0); |
| 30 | 30 | |
| 31 | 31 | pub fn initIp4(ip4: u32, _port: u16) Address { |
| 32 | return Address{ | |
| 33 | .os_addr = os.sockaddr{ | |
| 34 | .in = os.sockaddr_in{ | |
| 35 | .family = os.AF_INET, | |
| 36 | .port = mem.nativeToBig(u16, _port), | |
| 37 | .addr = ip4, | |
| 38 | .zero = [_]u8{0} ** 8, | |
| 32 | switch (builtin.os) { | |
| 33 | .macosx, .ios, .watchos, .tvos, .freebsd, .netbsd => return Address{ | |
| 34 | .os_addr = os.sockaddr{ | |
| 35 | .in = os.sockaddr_in{ | |
| 36 | .len = @sizeOf(os.sockaddr_in), | |
| 37 | .family = os.AF_INET, | |
| 38 | .port = mem.nativeToBig(u16, _port), | |
| 39 | .addr = ip4, | |
| 40 | .zero = [_]u8{0} ** 8, | |
| 41 | }, | |
| 39 | 42 | }, |
| 40 | 43 | }, |
| 41 | }; | |
| 44 | .linux => return Address{ | |
| 45 | .os_addr = os.sockaddr{ | |
| 46 | .in = os.sockaddr_in{ | |
| 47 | .family = os.AF_INET, | |
| 48 | .port = mem.nativeToBig(u16, _port), | |
| 49 | .addr = ip4, | |
| 50 | .zero = [_]u8{0} ** 8, | |
| 51 | }, | |
| 52 | }, | |
| 53 | }, | |
| 54 | else => @compileError("Address.initIp4 not implemented for this platform"), | |
| 55 | } | |
| 42 | 56 | } |
| 43 | 57 | |
| 44 | 58 | pub fn initIp6(ip6: Ip6Addr, _port: u16) Address { |
lib/std/net/test.zig+16-2| ... | ... | @@ -3,7 +3,7 @@ const net = std.net; |
| 3 | 3 | const mem = std.mem; |
| 4 | 4 | const testing = std.testing; |
| 5 | 5 | |
| 6 | test "std.net.parseIp4" { | |
| 6 | test "parseIp4" { | |
| 7 | 7 | testing.expect((try net.parseIp4("127.0.0.1")) == mem.bigToNative(u32, 0x7f000001)); |
| 8 | 8 | |
| 9 | 9 | testParseIp4Fail("256.0.0.1", error.Overflow); |
| ... | ... | @@ -21,7 +21,7 @@ fn testParseIp4Fail(buf: []const u8, expected_err: anyerror) void { |
| 21 | 21 | } |
| 22 | 22 | } |
| 23 | 23 | |
| 24 | test "std.net.parseIp6" { | |
| 24 | test "parseIp6" { | |
| 25 | 25 | const ip6 = try net.parseIp6("FF01:0:0:0:0:0:0:FB"); |
| 26 | 26 | const addr = net.Address.initIp6(ip6, 80); |
| 27 | 27 | var buf: [100]u8 = undefined; |
| ... | ... | @@ -29,6 +29,20 @@ test "std.net.parseIp6" { |
| 29 | 29 | std.testing.expect(mem.eql(u8, "[ff01::fb]:80", printed)); |
| 30 | 30 | } |
| 31 | 31 | |
| 32 | test "ip4s" { | |
| 33 | var buffer: [18]u8 = undefined; | |
| 34 | for ([_][]const u8{ | |
| 35 | "0.0.0.0", | |
| 36 | "255.255.255.255", | |
| 37 | "1.2.3.4", | |
| 38 | "123.255.0.91", | |
| 39 | }) |ip| { | |
| 40 | var addr = Address.initIp4(parseIp4(ip) catch unreachable, 0); | |
| 41 | var newIp = std.fmt.bufPrint(buffer[0..], "{}", addr) catch unreachable; | |
| 42 | std.testing.expect(std.mem.eql(u8, ip, newIp[0 .. newIp.len - 2])); | |
| 43 | } | |
| 44 | } | |
| 45 | ||
| 32 | 46 | test "resolve DNS" { |
| 33 | 47 | if (std.builtin.os == .windows) { |
| 34 | 48 | // DNS resolution not implemented on Windows yet. |