pub rec IPv4;
以四个八位组(octets)存储的 IPv4 地址
octets:网络字节序下的四个八位组
pub rec IPv6;
以十六个八位组存储的 IPv6 地址
octets:网络字节序下的十六个八位组
pub rec Addr;
IPv4 和 IPv6 地址的标记联合(tagged union)
is_v6:如果地址是 IPv6,则为非零 v4:IPv4 地址(当 is_v6 == 0 时有效) v6:IPv6 地址(当 is_v6 != 0 时有效)
pub rec Endpoint;
IP 地址和端口对
addr:IPv4 地址 port:主机字节序的端口号
pub fun ipv4(a: u8, b: u8, c: u8, d: u8) IPv4;
从四个八位组创建一个 IPv4 地址
a:第一个八位组 b:第二个八位组 c:第三个八位组 d:第四个八位组 ret:构造出的 IPv4 地址
pub fun ipv4_any() IPv4;
返回未指定的 IPv4 地址(0.0.0.0)
pub fun ipv4_loopback() IPv4;
返回 IPv4 回环地址(127.0.0.1)
pub fun ipv4_to_u32(ip: IPv4) u32;
将 IPv4 地址转换为网络字节序的 u32
ip:IPv4 地址 ret:网络字节序的 32 位整数
pub fun ipv4_from_u32(n: u32) IPv4;
将网络字节序的 u32 转换为 IPv4 地址
n:网络字节序的 32 位整数 ret:构造出的 IPv4 地址
pub fun ipv4_format(ip: IPv4, buf: *u8, len: usize) usize;
将 IPv4 地址格式化为 "a.b.c.d" 写入缓冲区
ip:IPv4 地址 buf:目标缓冲区 len:缓冲区容量(以字节为单位) ret:写入的字节数(不包括空终止符)
pub fun ipv6_any() IPv6;
返回未指定的 IPv6 地址(::)
pub fun ipv6_loopback() IPv6;
返回 IPv6 回环地址(::1)
pub fun addr_v4(ip: IPv4) Addr;
将 IPv4 地址包装在 Addr 中
ip:IPv4 地址 ret:包含 IPv4 地址的 Addr
pub fun addr_v6(ip: IPv6) Addr;
将 IPv6 地址包装在 Addr 中
ip:IPv6 地址 ret:包含 IPv6 地址的 Addr
pub fun endpoint(a: u8, b: u8, c: u8, d: u8, port: u16) Endpoint;
从八位组和端口创建一个 Endpoint
a:第一个八位组 b:第二个八位组 c:第三个八位组 d:第四个八位组 port:主机字节序的端口号 ret:构造出的 Endpoint
pub fun to_sockaddr(ep: Endpoint, sa: *u8);
将 Endpoint 序列化为 sockaddr_in 字节缓冲区
ep:要序列化的端点 sa:指向大小至少为 os.SOCKADDR_IN_SIZE 字节的缓冲区的指针
pub fun from_sockaddr(sa: *u8, ep: *Endpoint);
将 sockaddr_in 字节缓冲区反序列化为 Endpoint
sa:指向 sockaddr_in 缓冲区的指针 ep:指向要填充的 Endpoint 的指针