【问题标题】:What is the need of separate address structure in sockaddr_in?sockaddr_in 中需要单独的地址结构是什么?
【发布时间】:2023-04-07 13:47:01
【问题描述】:

这是 netinet/in.h

中定义的互联网 (IPv4) 套接字地址结构
struct sockaddr_in {
  uint8_t         sin_len;      
  sa_family_t     sin_family;   
  in_port_t       sin_port;                               
  struct in_addr  sin_addr;                                   
  char            sin_zero[8];  
};
struct in_addr {
  in_addr_t   s_addr;                                          
};

这里只需要地址字段的单独结构。

为什么我们不能使用下面的结构?

  struct sockaddr_in {
  uint8_t         sin_len;      
  sa_family_t     sin_family;   
  in_port_t       sin_port;                               
  in_addr_t       sin_addr;                                   
  char            sin_zero[8];  
};

【问题讨论】:

    标签: c linux sockets network-programming ipv4


    【解决方案1】:

    这是出于历史原因。在套接字编程的早期,struct in_addr 包含各种结构的union,因此您可以访问各个字节。当子网划分和无类寻址出现时,这个union 变得不必要了,但是把struct 换成一个简单的unsigned long 会破坏很多代码,所以就一直这样。

    如果您对网络编程感兴趣并且还没有获得UNIX Network Programming 的副本,那么我强烈建议您这样做,这是获取此类小细节的金矿。

    【讨论】:

    • Paul- 感谢您的参考书 +1
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多