ip

std.net.ip

rec IPv4

pub rec IPv4;

以四个八位组(octets)存储的 IPv4 地址

octets:网络字节序下的四个八位组

rec IPv6

pub rec IPv6;

以十六个八位组存储的 IPv6 地址

octets:网络字节序下的十六个八位组

rec Addr

pub rec Addr;

IPv4 和 IPv6 地址的标记联合(tagged union)

is_v6:如果地址是 IPv6,则为非零 v4:IPv4 地址(当 is_v6 == 0 时有效) v6:IPv6 地址(当 is_v6 != 0 时有效)

rec Endpoint

pub rec Endpoint;

IP 地址和端口对

addr:IPv4 地址 port:主机字节序的端口号

fun ipv4

pub fun ipv4(a: u8, b: u8, c: u8, d: u8) IPv4;

从四个八位组创建一个 IPv4 地址

a:第一个八位组 b:第二个八位组 c:第三个八位组 d:第四个八位组 ret:构造出的 IPv4 地址

fun ipv4_any

pub fun ipv4_any() IPv4;

返回未指定的 IPv4 地址(0.0.0.0)

fun ipv4_loopback

pub fun ipv4_loopback() IPv4;

返回 IPv4 回环地址(127.0.0.1)

fun ipv4_to_u32

pub fun ipv4_to_u32(ip: IPv4) u32;

将 IPv4 地址转换为网络字节序的 u32

ip:IPv4 地址 ret:网络字节序的 32 位整数

fun ipv4_from_u32

pub fun ipv4_from_u32(n: u32) IPv4;

将网络字节序的 u32 转换为 IPv4 地址

n:网络字节序的 32 位整数 ret:构造出的 IPv4 地址

fun ipv4_format

pub fun ipv4_format(ip: IPv4, buf: *u8, len: usize) usize;

将 IPv4 地址格式化为 "a.b.c.d" 写入缓冲区

ip:IPv4 地址 buf:目标缓冲区 len:缓冲区容量(以字节为单位) ret:写入的字节数(不包括空终止符)

fun ipv6_any

pub fun ipv6_any() IPv6;

返回未指定的 IPv6 地址(::)

fun ipv6_loopback

pub fun ipv6_loopback() IPv6;

返回 IPv6 回环地址(::1)

fun addr_v4

pub fun addr_v4(ip: IPv4) Addr;

将 IPv4 地址包装在 Addr

ip:IPv4 地址 ret:包含 IPv4 地址的 Addr

fun addr_v6

pub fun addr_v6(ip: IPv6) Addr;

将 IPv6 地址包装在 Addr

ip:IPv6 地址 ret:包含 IPv6 地址的 Addr

fun endpoint

pub fun endpoint(a: u8, b: u8, c: u8, d: u8, port: u16) Endpoint;

从八位组和端口创建一个 Endpoint

a:第一个八位组 b:第二个八位组 c:第三个八位组 d:第四个八位组 port:主机字节序的端口号 ret:构造出的 Endpoint

fun to_sockaddr

pub fun to_sockaddr(ep: Endpoint, sa: *u8);

Endpoint 序列化为 sockaddr_in 字节缓冲区

ep:要序列化的端点 sa:指向大小至少为 os.SOCKADDR_IN_SIZE 字节的缓冲区的指针

fun from_sockaddr

pub fun from_sockaddr(sa: *u8, ep: *Endpoint);

sockaddr_in 字节缓冲区反序列化为 Endpoint

sa:指向 sockaddr_in 缓冲区的指针 ep:指向要填充的 Endpoint 的指针