PRNetAddr¶
与 套接字操作函数 一起使用的类型,用于指定网络地址。
语法¶
#include <prio.h>
union PRNetAddr {
struct {
PRUint16 family;
char data[14];
} raw;
struct {
PRUint16 family;
PRUint16 port;
PRUint32 ip;
char pad[8];
} inet;
#if defined(_PR_INET6)
struct {
PRUint16 family;
PRUint16 port;
PRUint32 flowinfo;
PRIPv6Addr ip;
} ipv6;
#endif /* defined(_PR_INET6) */
};
typedef union PRNetAddr PRNetAddr;
字段¶
该结构具有以下字段
family
地址族:
PR_AF_INET|PR_AF_INET6
用于raw.family
,PR_AF_INET
用于inet.family
,PR_AF_INET6
用于ipv6.family
。data
原始地址数据。
port
TCP 或 UDP 的端口号,以网络字节序表示。
ip
实际的 32 位(对于
inet.ip
)或 128 位(对于ipv6.ip
)IP 地址。inet.ip
字段以网络字节序表示。pad
未用。
flowinfo
路由信息。
描述¶
联合体 PRNetAddr 表示网络地址。NSPR 仅支持互联网地址族。默认情况下,NSPR 仅构建为支持 IPv4,但可以构建 NSPR 库以同时支持 IPv4 和 IPv6。因此,family
字段对于默认的 NSPR 只能是 PR_AF_INET
,如果二进制文件支持 IPv6
,则还可以是 PR_AF_INET6
。
PRNetAddr 与熟悉的 Berkeley 套接字接口中的套接字地址结构在二进制上兼容,尽管不应依赖此事实。联合体的 raw 成员等效于 struct sockaddr
,inet
成员等效于 struct sockaddr_in
,如果二进制文件构建时支持 IPv6
,则 ipv6
成员等效于 struct sockaddr_in6
。(请注意,PRNetAddr 没有 length
字段,该字段存在于某些 Unix 平台上的 struct sockaddr_in
中。)
如果包含 prio.h
,则定义宏 PR_AF_INET
、PR_AF_INET6
、PR_INADDR_ANY
、PR_INADDR_LOOPBACK
。 PR_INADDR_ANY
和 PR_INADDR_LOOPBACK
是主机字节序中的特殊 IPv4
地址,因此必须将其转换为网络字节序,然后才能将其分配给 inet.ip
字段。