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.familyPR_AF_INET 用于 inet.familyPR_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 sockaddrinet 成员等效于 struct sockaddr_in,如果二进制文件构建时支持 IPv6,则 ipv6 成员等效于 struct sockaddr_in6。(请注意,PRNetAddr 没有 length 字段,该字段存在于某些 Unix 平台上的 struct sockaddr_in 中。)

如果包含 prio.h,则定义宏 PR_AF_INETPR_AF_INET6PR_INADDR_ANYPR_INADDR_LOOPBACKPR_INADDR_ANYPR_INADDR_LOOPBACK 是主机字节序中的特殊 IPv4 地址,因此必须将其转换为网络字节序,然后才能将其分配给 inet.ip 字段。