整理struct sockaddr和struct sockaddr_in
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
整理struct sockaddr和struct sockaddr_in相关推荐
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
sockaddr struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; ...
- struct sockaddr和struct sockaddr_in区别
struct sockaddr和struct sockaddr_in这两个结构体用来处理网络通信的地址. 一.sockaddr sockaddr在头文件#include <sys/socket. ...
- struct sockaddr和struct sockaddr_in的强制类型转换
1. struct sockaddr {unsigned short sa_family;//地址类型char sa_data[14];//协议地址} 2. struct sockaddr_in {u ...
- struct sockaddr与struct sockaddr in struct sockaddr un的区别和联系
在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下: typedef unsigned short sa_family_t ...
- 【C++】Winsock套接字编程,struct sockaddr、sockaddr_in,主机网络字节序
前一篇关于windows平台下winsock套接字编程的相关api struct sockaddr与struct sockaddr_in 在bind函数,connect函数里提到了套接字编程网络地址信 ...
- struct ifconf和struct ifreq,获取网线插入状态
struct ifreq 这个结构定义在include/net/if.h,用来配置ip地址,激活接口,配置MTU等接口信息的 struct ifconf 通常是用来保存所有接口信息的 应用 想要获取当 ...
- 获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf
http://blog.csdn.net/windeal3203/article/details/39320605 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq ...
- struct和typedef struct
原文:https://www.cnblogs.com/qyaizs/articles/2039101.html struct和typedef struct 分三块来讲述: 1 首先://注意在C和C+ ...
- 结构体struct timeval 和 struct timespec的定义
结构体struct timeval 和 struct timespec的定义均在头文件<sys/time.h>中,具体定义如下: struct timeval {long tv_sec; ...
最新文章
- python画出的雷达图效果-PYTHON绘制雷达图代码实例
- .Net AppDomain详解(一)
- 关于数组首地址a、a+1、a[0]、a[0]+1、*a、*a、a+0的解析
- 一年代码功能点的创新性怎么写_技术创新管理--作业--答案
- 怎么删除python3.7注册表内容_python3操作注册表的方法(Url protocol)
- 第64节:Java中的Spring Boot 2.0简介笔记
- spring 注入 list和map及enum映射
- 基于android的个人理财软件 android stu_Android聊天软件开发(基于网易云IM即时通讯)——注册账号(二)...
- 从新一代华为全屋智能解决方案看智能家居的本质
- 多个android手机客户端通信,android中利用Socket实现手机客户端与PC端进行通信
- 用Python语言模型和LSTM做一个Drake饶舌歌词生成器!自己蒙了!
- 架构设计软件EA使用指南
- 2021年中国光谱分析仪器市场趋势报告、技术动态创新及2027年市场预测
- spring中读不到配置文件问题
- 社区折腾日志:基于python搭建个人微信/支付宝免签支付功能
- 随机信号处理笔记 - ING
- 《炬丰科技-半导体工艺》薄膜晶体管中的光刻技术
- BlackBerry 快捷键
- DJI mobile SDK学习
- 视频压缩工具如何使用?