ios中和socket相关的结构体
来源:互联网 发布:千影浏览器mac版 编辑:程序博客网 时间:2024/05/16 19:33
IPv6协议的地址长度是128位,全部可分配地址数为2的128次方(2^128)个,不再存在地址匮乏问题。同时,IPv6地址表示方式和IPv4也不同:IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位以十进制数显式,中间用点号分隔。而IPv6采用的是十六进制格式,既128位地址是以16位为一分组,每个16位分组写成4个十六进制数,中间用冒号分十六进制格式。
IPV4的地址,如:118.207.122.214
IPV6的地址,如:31da:1d3:0:2f3b:2aa:ff:fe28:9c5a
/*
* [XSI] Structure used by kernel to store most addresses.一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构:sockaddr_in,所以要求这两个结构在内存中大小一致
*/
struct sockaddr {
__uint8_t sa_len; /* total length, 即struct sockaddr对象在内存中的总长度*/
sa_family_t sa_family; /* [XSI] address family: ip地址种类,值为AF_INET时,代表IPV4的地址;值为AF_INET6时,代表IPV6的地址*/
char sa_data[14]; /* [XSI] addr value (actually larger), 14字节的网络数据格式的地址(包括端口号和数字IP) */
};
/*
* Socket address for IPv4, internet style.
*/
struct sockaddr_in {
__uint8_t sin_len;/* total length, 即struct sockaddr_in对象在内存中的总长度*/
sa_family_t sin_family;/* [XSI] address family: ip地址种类,值为AF_INET时,代表IPV4的地址*/
in_port_t sin_port;/*Port number(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/
struct in_addr sin_addr;/*IP address(必须要采用网络数据格式)*/
char sin_zero[8];/*Same size as struct sockaddr没有实际意义,只是为了跟sockaddr结构在内存中对齐*/
};
/*
* Socket address for IPv6
*/
#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
#define SIN6_LEN
#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
struct sockaddr_in6 {
__uint8_t sin6_len; /* length of this struct(sa_family_t) */
sa_family_t sin6_family; /* AF_INET6 (sa_family_t) */
in_port_t sin6_port; /* Transport layer port # (in_port_t) */
__uint32_t sin6_flowinfo; /* IP6 flow information */
struct in6_addr sin6_addr; /* IP6 address */
__uint32_t sin6_scope_id; /* scope zone index */
};
/*
* IPv6 address
*/
struct in6_addr {
union {
__uint8_t __u6_addr8[16];
__uint16_t __u6_addr16[8];
__uint32_t __u6_addr32[4];
} __u6_addr; /* 128-bit IP6 address */
};
/*
* IPv4 Internet address (a structure for historical reasons)
*/
struct in_addr {
in_addr_t s_addr;
};
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
socklen_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for hostname */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
参数说明
hostname:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
service:服务名可以是十进制的端口号,也可以是已定义的服务名称,如ftp、http等
hints:可以是一个空指针,也可以是一个指向某个addrinfo结构体的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。举例来说:指定的服务支持TCP,所以调用者可以把hints结构中的ai_socktype成员设置成SOCK_STREAM使得返回的仅仅是适用于数据流套接口的信息。
result:本函数通过result指针参数返回一个指向addrinfo结构体链表的指针。
返回值:0——成功,非0——出错,通过getAddrInfo函数判断一个字符串地址是IPV4还是IPV6
htons函数是将short整型变量从主机字节顺序转变成网络字节顺序,就是整数在地址空间存储方式变为:高位字节存放在内存的低地址处(大尾顺序)。
host byte order 0x0010,十进制为16
network byte order 0x1000,十进制为4096
0 0
- ios中和socket相关的结构体
- Socket方面的结构体及相关函数
- Socket方面的结构体及相关函数
- socket的结构体
- JSP中和代码相关的语法元素:
- struts中和validator相关的一些注意事项
- Ubuntu 中和中文相关的命令总结
- 手机测试中和网络相关的几个问题
- Eclipse中和编辑相关的快捷键
- init进程中和bt相关的部分
- Eclipse中和编辑相关的快捷键
- Eclipse中和编辑相关的快捷键
- Eclipse中和编辑相关的快捷键
- Ubuntu中和用户、用户组相关的操作
- js中和数据类型相关的函数
- android中和屏幕相关的操作
- Eclipse中和编辑相关的快捷键
- css中和图片相关的样式
- 选择器
- Labyrinth
- 自己对MVP+Retrofit2+RxJava的理解
- centos 常用命令积累
- C#学习笔记-委托
- ios中和socket相关的结构体
- Android学习笔记--RetrofitCallback封装
- 堆与栈
- PAT_1002.A+B for Polynomials
- 1html的基本结构
- 二分查找
- C++语言引用
- Leetcode-504. Base 7
- NodeMCU:烧写固件及连接WIFI