upd
This commit is contained in:
+22
-12
@@ -30,25 +30,32 @@ pub fn SocketAddr.new_ipv4(addr [4]u8, port u16) SocketAddr {
|
||||
return sock_addr
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct Inet6SocketAddrParams {
|
||||
pub:
|
||||
flow_info u32
|
||||
scope_id u32
|
||||
}
|
||||
|
||||
// SocketAddr.new_ipv6 creates new AF_INET6 socket address.
|
||||
// addr must be set in network (big-endian) byte order.
|
||||
// Use `find_network_interface()` to get an integer scope_id from its string representation.
|
||||
pub fn SocketAddr.new_ipv6(addr [16]u8, port u16, flow_info u32, scope_id u32) SocketAddr {
|
||||
pub fn SocketAddr.new_ipv6(addr [16]u8, port u16, params Inet6SocketAddrParams) SocketAddr {
|
||||
mut sock_addr := unsafe { SocketAddr.new(af_inet6, 28) }
|
||||
unsafe {
|
||||
sock_addr.write(binary.big_endian_get_u16(port)) or {}
|
||||
sock_addr.write(binary.big_endian_get_u32(flow_info)) or {}
|
||||
sock_addr.write(binary.big_endian_get_u32(params.flow_info)) or {}
|
||||
sock_addr.write(addr[..]) or {}
|
||||
sock_addr.write(binary.big_endian_get_u32(scope_id)) or {}
|
||||
sock_addr.write(binary.big_endian_get_u32(params.scope_id)) or {}
|
||||
}
|
||||
return sock_addr
|
||||
}
|
||||
|
||||
// SocketAddr.new_unix creates new AF_UNIX socket address with given path. The path must
|
||||
// fit in platform dependent const `max_unix_path_len` value.
|
||||
// fit in platform dependent `max_unix_path_len` const value.
|
||||
pub fn SocketAddr.new_unix(path string) !SocketAddr {
|
||||
if path.len > max_unix_path_len {
|
||||
return error('Too long path to socket')
|
||||
return error('too long path to socket, max length is ${max_unix_path_len}')
|
||||
}
|
||||
mut sock_addr := unsafe { SocketAddr.new(af_unix, usize(max_unix_path_len) + 2) }
|
||||
unsafe {
|
||||
@@ -141,7 +148,7 @@ pub fn SocketAddr.from_ptr_copy(ptr voidptr, size isize) !SocketAddr {
|
||||
}
|
||||
|
||||
// SocketAddr.from_ptr creates new socket address from specified pointer.
|
||||
// Note: The data is reused, not copied. See also SocketAddr.from_ptr_copy().
|
||||
// Note: Data is reused, not copied.
|
||||
@[unsafe]
|
||||
pub fn SocketAddr.from_ptr(ptr voidptr, size isize) !SocketAddr {
|
||||
if isnil(ptr) {
|
||||
@@ -164,8 +171,8 @@ pub fn (a SocketAddr) family() AddrFamily {
|
||||
return f
|
||||
}
|
||||
|
||||
// is_empty returns true if socket address is unspecified — the data pointer is nil or
|
||||
// data contains only zeros. Empty address cannot be used in `bind` and `connect` calls.
|
||||
// is_empty returns true if socket address is unspecified: the data pointer is nil or socket
|
||||
// address data is zero. Empty address cannot be used in `bind()` and `connect()` calls.
|
||||
pub fn (a SocketAddr) is_empty() bool {
|
||||
if isnil(a.data) {
|
||||
return true
|
||||
@@ -216,10 +223,13 @@ pub fn (a SocketAddr) size() u32 {
|
||||
}
|
||||
|
||||
// str returns the string representation of socket address.
|
||||
// Supported address families are AF_INET, AF_INET6, and AF_UNIX.
|
||||
// Examples: '172.16.16.132:1080', '[fdf1:72d1:0033:0000:0000:0000:0000:0247]:25535',
|
||||
// '/run/app.sock'. For others a string like 'SocketAddr(0x00000000)' will be returned.
|
||||
// See also `translate_name()`.
|
||||
// Only AF_UNIX, AF_INET, and AF_INET6 are supported. str will return a string
|
||||
// consisting of the address and port number separated by a colon, or the absolute
|
||||
// path to the socket file. The IPv6 address will be returned in expanded form and
|
||||
// enclosed in square brackets. For all other address families, str will return a
|
||||
// string of the form `SocketAddr(0x00000000)` with the socket address data pointer
|
||||
// in brackets.
|
||||
// Note: See also `name_info()`.
|
||||
pub fn (a SocketAddr) str() string {
|
||||
match a.family() {
|
||||
af_inet {
|
||||
|
||||
Reference in New Issue
Block a user