博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
整理struct sockaddr和struct sockaddr_in
阅读量:5789 次
发布时间:2019-06-18

本文共 1728 字,大约阅读时间需要 5 分钟。

struct sockaddr定义在/usr/include/linux/socket.h

struct sockaddr {  unsigned short ss_family;  char ss_data[128 - sizeof(unsigned short)];    // 14}

struct sockaddr_in定义在/usr/include/netinet/in.h

struct sockaddr_in {  in_port_t sin_port;  struct in_addr sin_addr;      //struct in_addr {                   //  unsigned long s_addr;   //32位的IP地址                   //}  /* Pad to size of `struct sockaddr'. */  unsigned char sin_zero[sizeof (struct sockaddr) -            __SOCKADDR_COMMON_SIZE -            sizeof (in_port_t) -            sizeof (struct in_addr)];   // 8}                      // sin_zero[8]的存在是为了保证struct sockaddr_in的大小和struct sockaddr的大小相等

  struct sockaddr是通用的套接字地址。

  struct sockaddr_in是internet环境下套接字的地址形式。

  两者的长度一样,都是16个字节。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr结构。一般情况下,需要把sockaddr_in结构强制转换成sockaddr结构再传入系统调用函数中。

struct sockaddr_in servaddr;bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr));

 

  BSD网络软件中包含了两个函数,用来在二进制地址格式和点分十进制字符串格式之间互相转换:

  仅支持IPV4: 

in_addr_t inet_addr(const char *cp);char *inet_ntoa(struct in_addr in);

  同时支持IPV4和IPV6:

const char *inet_ntop(int domain, const void *addr, char *str, socklen_t size);int inet_pton(int domain, const char *str, void *addr);

 

  通常的用法:

  int sock_fd;  struct sockaddr_in my_addr;  sock_fd = socket(AF_INET, SOCK_STREAM, 0);   my_addr.sin_family = AF_INET;   //  my_addr.sin_port = htons(MyPort); //  my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");    bzero(&(my_addr.sin_zero), 8);   // zero the rest of the struct  // memset(&my_addr.sin_zero, 0, 8);    bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockeaddr));

参考:https://www.cnblogs.com/hnrainll/archive/2011/07/18/2109375.html

转载于:https://www.cnblogs.com/coolYuan/p/8350649.html

你可能感兴趣的文章
Kubernetes 1.11 手动安装并启用ipvs
查看>>
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
oracle备份与恢复--rman
查看>>
图片变形的抗锯齿处理方法
查看>>
Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联
查看>>
phpstorm安装laravel-ide-helper实现自动完成、代码提示和跟踪
查看>>
python udp编程实例
查看>>
TortoiseSVN中图标的含义
查看>>
Tasks and Back stack 详解
查看>>
关于EXPORT_SYMBOL的作用浅析
查看>>
成功的背后!(给所有IT人)
查看>>
在SpringMVC利用MockMvc进行单元测试
查看>>
Nagios监控生产环境redis群集服务战
查看>>
Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件
查看>>
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>