sockaddr与sockaddr_in结构体区别 不同 详解
粉丝不过W
struct sockaddr 和 struct sockaddr_in 这两个结构体都是用来 处理网络通信的地址
/*
*此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息
*note:
* 目标地址和端口信息在一起
*/
#include <sys/socket.h>
struct sockaddr
{
//地址家族,一般“AF_xxx”的形式,通常使用AF_INET
unsigned short sa_family;
// 14字节协议地址,目标地址和端口信息
char sa_data[14];
}
#include <netinet/in.h>
struct sockaddr_in
{
short int sin_family; //协议族
unsigned short int sin_port; //端口号(使用网络字节顺序)
struct in_addr sin_addr; //IP地址
unsigned char sin_zero[8]; //sockaddr与sockaddr_in 保持大小相同而保留的空字节
};
struct in_addr
{
unsigned long s_addr;
};
typedef struct in_addr
{
union
{
struct
{
unsigned char s_b1,
s_b2,
s_b3,
s_b4;
} S_un_b;
struct
{
unsigned short s_w1,
s_w2;
} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针,同样可以 指向sockraddr的结构体,并代替它
struct sockaddr_in mysock;
bind(sockfd,(struct sockaddr *)&mysock,sizeof(struct sockaddr); /* bind的时候进行转化 */