Chinaunix首页 | 论坛 | 博客
  • 博客访问: 658430
  • 博文数量: 175
  • 博客积分: 2457
  • 博客等级: 大尉
  • 技术积分: 1488
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-13 20:31
文章分类

全部博文(175)

文章存档

2012年(22)

2011年(153)

分类: C/C++

2011-07-27 21:07:34

sockaddr和sockaddr_in
分类: linux c 1497人阅读 评论(0) 收藏 举报
  1. "4">sockaddr  
  1. struct sockaddr为通用的套接口地址结构,在头文件中定义,结构定义如下:  
  1. class="csharp" name="code">struct sockaddr {   
  2.   
  3.          uint8_t          sa_len;                   
  4.   
  5.          sa_family_t   sa_family;      /*address family; AF_XXX value*/                   
  6.   
  7.          char             sa_data[14];  /*protocol-specific address*/                  
  8.   
  9. };  
  1. "4">sockaddr_in  
  1. struct sockaddr为IPv4套接口地址结构,在头文件in.h>中定义,结构定义如下:  
  1. class="csharp" name="code">struct sockaddr_in{  
  2.   
  3.           uint8_t        sin_len;                        /*length of structure(16)*/  
  4.   
  5.           sa_family_t sin_family;                     /*AF_INET*/  
  6.   
  7.           in_port_t     sin_port;                       /*16-bit TCP or UDP port number, network byte ordered*/  
  8.   
  9.           struct in_addr sin_addr;                  /*32-bit IPv4 address, network byte ordered*/  
  10.   
  11.           char           sin_zero[8];                   /*unused*/  
  12.   
  13. };  
  1. 使用通用的套接口地址结构的原因是:从应用程序开发人员角度来看,是给指向特定于协议的地址结构的指针转换类型;  
  1. 而从内核的角度来看,内核必须依据调用者的指针,转换为struct sockaddr*,然后坚持sa_family的值确定结构的类型。  
  1. 其中成员sin_zero暂时没有使用到,用来扩充功能,一般在使用时将其初始化为0,事实上,Posix.1g只需要这个结构中的三个成员sin_family、sin_port和sin_addr,加入其他的两项完全是为了兼容性考虑的。  
阅读(1349) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~