套接字编程——为什么我们不把sin_family转换成网络顺序呢?

Socket programming - why do we not convert sin_family to network order?

下面是一个有效的套接字创建示例(在 C 中):

  // Construct local address structure
  struct sockaddr_in servAddr;                  // Local address
  memset(&servAddr, 0, sizeof(servAddr));       // Zero out structure
  servAddr.sin_family = AF_INET;                // IPv4 address family
  servAddr.sin_addr.s_addr = htonl(INADDR_ANY); // Any incoming interface
  servAddr.sin_port = htons(servPort);          // Local port

我们需要将地址和端口转换为网络顺序,而不是地址族。这是为什么?

sin_family 不通过网络发送,因此无需使用网络字节顺序。它只是您操作系统的本地标志。它指示 struct sockaddr * 指针的多态类型,因为 IPv4 不是唯一的格式。例如,AF_UNIX 地址不会获取 IP 地址和端口字段。