天天看点

套接字地址结构

套接字地址结构:

A. IPV4套接字地址结构:

         IPV4套接字地址结构也通常称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中。

                   struct in_addr{

                  in_addr_t      s_addr;        

             };

             struct sockaddr_in{

                  uint8_t            sin_len;          

                  sa_family_t     sin_family;     

                  in_port_t         sin_port;       

                  struct in_addr  sin_addr;      

                  char                sin_zero[8];    

             };

B. 通用套接字地址结构

     当作为一个参数传递给任何套接字的函数时,套接字的地址结构总是以引用的形式(指向该结构的指针)来传递,然后这样的指针作为参数之一的套接字函数必须处理来自所支持的任何协议簇的套接字地址结构。

             struct sockaddr{

                 uint8_t          sa_len;            

                 sa_family_t   sa_family;      

                 char              sa_data[14];   

                };

      从应用程序员的角度来看,通用套接字地址结构的唯一作用就是对指向特定协议的套接字地址结构的指针执行强制类型转换。比如:

          struct sockaddr_in serv;     

            bind(sockfd, (struct sockaddr *) &serv, sizeof(serv));

C. IPV6 套接字地址结构

     IPV6套接字地址结构在<netinet/in.h>头文件中定义。

     struct in6_addr{

         uint8_t     s6_addr[16];      

     }

     #define SIN6_LEN             

     struct sockaddr_in6{

            uint8_t             sin_len;          

            sa_family_t      sin_family;     

            in_port_t         sin_port;       

            uint32_t           sin6_flowinfo;  

            struct in6_addr  sin6_addr;   

            uint32_t           sin6_scope_id;  

     };

D. 新的通用套接字地址结构

     作为IPV6套接字API的一部分而定义的新的通用套接字地址结构克服了现有struct sockaddr 的一些缺点,新的struct sockaddr_storage 足以容纳系统所支持的任何套接字地址结构。

     struct sockaddr_storage {

           uint8_t     ss_len;                   

           sa_family_t   ss_family;        

};

继续阅读