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原始地址数据。
portTCP 或 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 字段。