我是靠谱客的博主 大意路灯,最近开发中收集的这篇文章主要介绍struct sockaddr与struct sockaddr_in的那些事,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  笔者在最近的网络编程学习中,写过使用UDP协议的echo服务程序。其中在提取int recvfrom(int sockfd ,void *buffer,size_t len,int flags,struct sockaddr * from,socklen_t  *fromlen)函数调用后获得的客户端IP信息时,使用char inet_ntoa(struct in_addr in)将from变量中存储的客户端IP地址信息转化为字符时,有些茫然。由此,感觉有必要探究一下struct sockaddr与struct sockaddr_in两种类型的渊源。

  通过查看图书(unix network prgramming)和上网,现将知识总结如下:

  在linux环境下,结构体structsockaddr在/usr/include/linux/socket.h中定义,具体如下:
  typedef unsigned short sa_family_t;
  struct sockaddr {

      sa_family_t    sa_family;   
       char           sa_data[14]; 

 }

 在linux环境下,结构体structsockaddr_in在/usr/include/netinet/in.h中定义,具体如下:

 struct sockaddr_in

  {  

       short int sin_family; /* Address family */  

       unsigned short int sin_port; /* Port number */  

       struct in_addr sin_addr; /* Internet address */  

       unsigned char sin_zero[8]; /* Same size as struct sockaddr */  /*sin_zero之所以定义为8个字节的数组,是为了保证和struct sockaddr一样大,便于相互转换*/

 };

struct sockaddr是通用的套接字地址,而structsockaddr_in则是internet环境下套接字的地址形式,二者长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。


最后

以上就是大意路灯为你收集整理的struct sockaddr与struct sockaddr_in的那些事的全部内容,希望文章能够帮你解决struct sockaddr与struct sockaddr_in的那些事所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部