套接口地址结构的详细介绍
套接口地址结构
IPv4套接口地址结构
IPv4套接口地址结构通常也称为“网际套接口地址结构”,它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中。
struct in_addr{
in_addr_t s_addr; /*32bit IPv4 address*/
}; /*network byte ordered*/
struct sockaddr_in {
uint8_t sin_len; /*length of structure(16)*/
sa_family_t sin_family; /*AF_INET*/
in_port_t sin_port; /*16-bit TCP or UDP port number*/
/*network byte ordered*/
struct in_addr sin_addr; /*32bit IPv4 address*/
/*network byte ordered*/
char sin_zero[8]; /*unused*/
};
通用套接口地址结构
在<sys/socket.h>中定义
struct sockaddr{
uint8_t sa_len;
sa_family_t sa_family; /*address family;AF_xxx value*/
char sa_data[14]; /*ptotocol-specific address*/
};
套接口函数被定义为采用指向通用套接口地址结构的指针,例如bind函数原型:
int bind(int, struct sockaddr *, socklen_t);
这要求对这些函数的任何调用都必须将指向特定于协议的套接口地址结构的指针类型转换成指向通用套接口地址结构的指针。例如:
struct sockaddr serv;
/*fill in serv{}*/
bind(sockfd, (struct sockaddr * ) &serv, sizeof(serv));
IPv6套接口地址结构
IPv6套接口地址结构在头文件<netinet/in.h>中定义
struct in6_addr{
uint8_t s6_addr[16]; /*128 bit IPv6 address*/
/*network byte ordered*/
};
#define SIN6_LEN /*required for compile-time test*/
struct sockaddr_in6{
uint8_t sin6_len; /*length of this struct(24)*/
sa_family_t sin6_family; /*AF_INET6*/
in_port_t sin6_port; /*transport layer port#*/
/*network byte ordered*/
uint32_t sin6_flowinfo; /*priorty & flow label*/
/*network byte ordered*/
struct in6_addr sin6_addr; /*IPv6 address*/
/*network byte ordered*/
};
本文地址:http://www.45fan.com/dnjc/69262.html