首页 > 代码库 > UNP_02_socket编程

UNP_02_socket编程

  套接字地址结构:

  每个协议簇都定义了它自己的套接字地址结构。 这些结构的名字都已 sockaddr_ 开头, 并对应每个协议簇的唯一后缀结束。

IPv4套接字地址结构:

 1 struct in_addr    {  2    in_addr_t      s_addr;       // 32-bit IPv4 address, network byte ordered 3 }; 4  5 struct sockaddr_in    { 6    uint8_t           sin_len;        // length of structure 7    sa_family_t       sin_family;     // AF_INET 8    in_port_t         sin_port ;      // 16-bit TCP or UDP port number, network byte ordered
9 struct in_addr sin_addr; //32-bit IPv4 address,network byte ordered
 10   char sin_zero[8];                 //unused  13 
};

套接字地址结构仅在给定主机上使用:虽然结构中的某些成员(如IP地址和端口号) 用在不同主机间的通信中,但结构本身并不参与通信。

 

通用套接字地址结构

  当作为参数传递给一个套接字函数时,套接字地址结构总是通过指针来传递,但通过指针来取得此参数的套接字函数必须处理来自所支持的任何协议簇的套接字地址结构。

  问题是如何声明所传指针的数据类型。 ANSI C中的解决办法是: 它由通用的指针类型 void * .  但套接字函数是在ANSI C之前定义的。1982年采用了一个办法是,定义一个 通用套接字结构(在 <sys/socket.h>中定义的)

struct sockaddr {    uintt_t        sa_len;    sa_fmaily_t    sa_family;    char           sa_data[14];};

 

UNP_02_socket编程