| ... | ... | @@ -40,21 +40,6 @@ pub const Address = extern union { |
| 40 | 40 | return error.InvalidIPAddressFormat; |
| 41 | 41 | } |
| 42 | 42 | |
| 43 | | pub fn parseUnix(path: []const u8) !Address { |
| 44 | | var sock_addr = os.sockaddr_un{ |
| 45 | | .family = os.AF_UNIX, |
| 46 | | .path = undefined, |
| 47 | | }; |
| 48 | | |
| 49 | | // this enables us to have the proper length of the socket in getOsSockLen |
| 50 | | mem.zero(&sock_addr.path); |
| 51 | | |
| 52 | | if (path.len > sock_addr.path.len) return error.NameTooLong; |
| 53 | | mem.copy(u8, &sock_addr.path, path); |
| 54 | | |
| 55 | | return Address{ .un = sock_addr }; |
| 56 | | } |
| 57 | | |
| 58 | 43 | pub fn parseExpectingFamily(name: []const u8, family: os.sa_family_t, port: u16) !Address { |
| 59 | 44 | switch (family) { |
| 60 | 45 | os.AF_INET => return parseIp4(name, port), |
| ... | ... | @@ -230,6 +215,21 @@ pub const Address = extern union { |
| 230 | 215 | }; |
| 231 | 216 | } |
| 232 | 217 | |
| 218 | pub fn initUnix(path: []const u8) !Address { |
| 219 | var sock_addr = os.sockaddr_un{ |
| 220 | .family = os.AF_UNIX, |
| 221 | .path = undefined, |
| 222 | }; |
| 223 | |
| 224 | // this enables us to have the proper length of the socket in getOsSockLen |
| 225 | mem.zero(&sock_addr.path); |
| 226 | |
| 227 | if (path.len > sock_addr.path.len) return error.NameTooLong; |
| 228 | mem.copy(u8, &sock_addr.path, path); |
| 229 | |
| 230 | return Address{ .un = sock_addr }; |
| 231 | } |
| 232 | |
| 233 | 233 | /// Returns the port in native endian. |
| 234 | 234 | pub fn getPort(self: Address) u16 { |
| 235 | 235 | const big_endian_port = switch (self.any.family) { |
| ... | ... | @@ -1306,7 +1306,7 @@ pub const StreamServer = struct { |
| 1306 | 1306 | pub fn listen(self: *StreamServer, address: Address) !void { |
| 1307 | 1307 | const nonblock = if (std.io.is_async) os.SOCK_NONBLOCK else 0; |
| 1308 | 1308 | const sock_flags = os.SOCK_STREAM | os.SOCK_CLOEXEC | nonblock; |
| 1309 | | const sockfd = try os.socket(os.AF_INET, sock_flags, os.IPPROTO_TCP); |
| 1309 | const sockfd = try os.socket(address.any.family, sock_flags, os.IPPROTO_TCP); |
| 1310 | 1310 | self.sockfd = sockfd; |
| 1311 | 1311 | errdefer { |
| 1312 | 1312 | os.close(sockfd); |