免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1477 | 回复: 0
打印 上一主题 下一主题

sockaddr 和 sockaddr_in 的区别(转) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-10 11:42 |只看该作者 |倒序浏览

Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为sizeof(struct sockaddr)。  
  struct sockaddr结构类型是用来保存socket信息的:  
  struct sockaddr {  
   unsigned short sa_family; /* 地址族, AF_xxx */  
char sa_data[14]; /* 14 字节的协议地址 */  
};  
  sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;sa_data则包含该socket的IP地址和端口号。  
  另外还有一种结构类型:  
  struct sockaddr_in {  
   short int sin_family; /* 地址族 */  
   unsigned short int sin_port; /* 端口号 */  
   struct in_addr sin_addr; /* IP地址 */  
   unsigned char sin_zero[8]; /* 填充0 以保持与struct sockaddr同样大小 */  
  };  
  这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到与struct sockaddr同样的长度,可以用bzero()或memset()函数将其置为零。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向sockaddr_in的指针转换为指向sockaddr的指针;或者相反。
你只要记住,填值的时候使用sockaddr_in结构,而作为函数的
参数传入的时候转换成sockaddr结构就行了,毕竟都是16个字符
长。
struct in_addr {
          union {
                  struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                  struct { u_short s_w1,s_w2; } S_un_w;
                  u_long S_addr;
          } S_un    };


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/100661/showart_1991687.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP