首先,我们需要明确,sockaddr_in结构体中的各个成员的数据类型。 structsockaddr_in { sa_family_t sin_family;/*协议族,通常为AF_INET*/in_port_t sin_port;/*网络字节序的端口号*/structin_addr sin_addr;/*IP地址结构体*/};/*Internet address.*/structin_addr { uint32_t s_addr;/*网络字节序的I...
sa_family :是2字节的地址家族,一般都是“AF_xxx”的形式,它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC。如果指定AF_INET,那么函数就不能返回任何IPV6相关的地址信息;如果仅指定了AF_INET6,则就不能返回任何IPV4地址信息。AF_UNSPEC则意味着函数返回的是适用于指定主机名和服务名且适合任何协议族的地址...
sockaddr 是通用的socket地址,具体到Internet socket,用下面的结构,二者可以进行类型转换 sa_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET,代表TCP/IP协议族 sa_data是14字节协议地址。 此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接...
sa_family_t sin_family;//地址族 char sa_data[14]; //14字节,包含套接字中的目标地址和端口信息 }; 二、sockaddr_in sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下: ...
sa_family_t sin_family; //地址族(Address Family),也就是地址类型 uint16_t sin_port; //16位的端口号 struct in_addr sin_addr; //32位IP地址 char sin_zero[8]; //不使用,一般用0填充 }; sockaddr和sockaddr_in的长度相同,都是16字节,只是将IP地址和端口号合并到一起,用一个成员sa_data表示。
sa_family_t sun_family; /* AF_LOCAL */ char sun_path[104]; /* null-terminated pathname */ }; 1. 2. 3. 4. 5. 6. 7. 由上可得sockaddr是用在同一台主机上的通信的。 struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ ...
sa_family是地址家族,一般都是“AF_xxx”的形式。好像通常大多用的是都是AF_INET sa_data是14字节协议地址 此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。但一般编程中并不直接针对此数据结构操作,而是使用另一个与sockaddr等价的数据结构:sockaddr_in: ...
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地址 */ ...
在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下: typedef unsigned short sa_family_t; struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */ 在linux环境下,结构体struct sockaddr_in在/...