IPv4套接字结构
#include <unp.h>
//#define SA struct sockaddr
struct in_addr
{
in_addr_t s_addr; //32位IPV4地址(4字节)
};
struct sockaddr_in
{
unit_8 sin_len; //整个结构的长度16字节(1字节)
sa_family_t sin_family; //地址家族(有长度字段1字节,无长度字段2字节)
in_port_t sin_port; //端口号(2字节)
struct in_addr sin_addr; //32位IPV4地址(4字节)
char sin_zero[8];//不用的字段(8字节)
};
通用套接字地址结构
#include <unp.h>
struct sockaddr
{
uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
};
使用套接字函数时通常需要把套接字结构地址转换成指向通用套接字地址结构地址的指针
struct sockaddr_in serv;
bind(sockfd, (sockaddr *) &serv, sizeof(serv));
IPv6套接字结构
#include <unp.h>
struct in6_addr
{
uint8_t s6_addr[16]; //128位IPV6地址(16字节)
}
struct sockaddr_in6
{
uint8_t sin6_len; //整个结构的长度28字节(1字节)
sa_family_t sin6_family;
in_port_t sin6_port;
uint32_t sin6_flowinfo; //32位流标(4字节)
struct in6_addr sin6_addr; //128位IPV6地址(16字节)
uint32_t sin6_scope_id //32位id范围
};
新的通用套接字地址结构
struct sockaddr_storage
{
uint8_t ss_len;
ss_family_t ss_family;
}