内容介绍:
一、通用套接口地址
#include <sys/socket.h>
struct sockaddr
{
sa_family_t sa_family;//地址族(无符号的短整数在linux中是两个字节)
char sa_data[14]; //地址数据
}
通用套接口地址本身没什么用处,但它为其他地址结构提供了一个重要的参考模型
二、sockaddr_un地址结构
#include <sys/un.h>
struct sockaddr_un
{
sa_family_t sun_family; //地址族
char sun_path[108]; //路径名
}
当使用lpr(1)找印文件时,系统实际是在使用本地套接口与找印服务进行通讯,本地套接口也被称为AF_UNIX域,sockaddr_un地址结构对应的就是AF_LOCAL和AF_UNIX地址结构
三、IPv4套接口地址
#include <netinet.h>
struct socket_in
{
sa_family_t sin_family; //地址族
uint16_t sin_port; //端口号
struct in_addr sin_addr;//Internet地址
unsigned sin_zero[8]; //占位字节
}
in_addr包含一个32位无符号整数,sin_zero[8]是不被使用的。
注 : sin_port sin_addr 都是网络字节序。
什么是网络字节序:
1.小端字节序:是一种将低序字节存储在起始位置的方法(如Intel的CPU)
2.大端字节序:是一种将高序字节存储在起始位置的方法
而网络上的数据的标准是大端字节序,如果Linux系统是在大端字节序的机器上运行,不需要转换字节,只要提供一个简单的宏替换,否则在用下面的函数进行转换:
#include <netinet/in.h>
unsigned long htonl(unsigned long hostlong);
unsigned short htons(unsigned short hostshort);
unsigned long ntohl(unsigned long netlong);
unsigned short ntohs(unsigned short netshort);
这里的短整数是16位,长整数为32位
四、X.25地址
#include <linux/x25.h>
struct sockaddr_x25
{
sa_family_t sx25_addr[16];//必须是AF_X25
x25_address sx25_addr; //X.121地址
}
typedef struct
{
char x25_addr[16];
}x25_address;
有关信息可参考 x25(4)手册,一个X.25的网络地址(由X.121标准定义)由一串十进制数组成,在sockaddr_x25结构中,主机号不能以空字符结尾
五、AF_INET6
struct sockaddr_in6
{
sa_family_t sin6_fam
一、通用套接口地址
#include <sys/socket.h>
struct sockaddr
{
sa_family_t sa_family;//地址族(无符号的短整数在linux中是两个字节)
char sa_data[14]; //地址数据
}
通用套接口地址本身没什么用处,但它为其他地址结构提供了一个重要的参考模型
二、sockaddr_un地址结构
#include <sys/un.h>
struct sockaddr_un
{
sa_family_t sun_family; //地址族
char sun_path[108]; //路径名
}
当使用lpr(1)找印文件时,系统实际是在使用本地套接口与找印服务进行通讯,本地套接口也被称为AF_UNIX域,sockaddr_un地址结构对应的就是AF_LOCAL和AF_UNIX地址结构
三、IPv4套接口地址
#include <netinet.h>
struct socket_in
{
sa_family_t sin_family; //地址族
uint16_t sin_port; //端口号
struct in_addr sin_addr;//Internet地址
unsigned sin_zero[8]; //占位字节
}
in_addr包含一个32位无符号整数,sin_zero[8]是不被使用的。
注 : sin_port sin_addr 都是网络字节序。
什么是网络字节序:
1.小端字节序:是一种将低序字节存储在起始位置的方法(如Intel的CPU)
2.大端字节序:是一种将高序字节存储在起始位置的方法
而网络上的数据的标准是大端字节序,如果Linux系统是在大端字节序的机器上运行,不需要转换字节,只要提供一个简单的宏替换,否则在用下面的函数进行转换:
#include <netinet/in.h>
unsigned long htonl(unsigned long hostlong);
unsigned short htons(unsigned short hostshort);
unsigned long ntohl(unsigned long netlong);
unsigned short ntohs(unsigned short netshort);
这里的短整数是16位,长整数为32位
四、X.25地址
#include <linux/x25.h>
struct sockaddr_x25
{
sa_family_t sx25_addr[16];//必须是AF_X25
x25_address sx25_addr; //X.121地址
}
typedef struct
{
char x25_addr[16];
}x25_address;
有关信息可参考 x25(4)手册,一个X.25的网络地址(由X.121标准定义)由一串十进制数组成,在sockaddr_x25结构中,主机号不能以空字符结尾
五、AF_INET6
struct sockaddr_in6
{
sa_family_t sin6_fam