套接字地址结构

套接字地址结构:

A. IPV4套接字地址结构:

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

                   struct in_addr{

                  in_addr_t      s_addr;         /* 32-bit IPV4 address*/

                                                        /*network byte ordered */

             };

             struct sockaddr_in{

                  uint8_t            sin_len;          /*length of structure */

                  sa_family_t     sin_family;      /* AF_INET */

                  in_port_t         sin_port;        /* 16-bit TCP or UDP port number */

                  struct in_addr  sin_addr;       /*32-bit IPV4 address*/

                  char                sin_zero[8];    /* unused */

             };

B. 通用套接字地址结构

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

             struct sockaddr{

                 uint8_t          sa_len;            

                 sa_family_t   sa_family;       /* address family:  AF_XXX value   */

                 char              sa_data[14];    /*protocol-specific address */

                };

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

          struct sockaddr_in serv;      /* IPV4 socket address structure */

           /* fill in serv{} */

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

C. 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 tests */

     struct sockaddr_in6{

            uint8_t             sin_len;           /* length of this struct (28) */

            sa_family_t      sin_family;      /* AF_INET6 */

            in_port_t         sin_port;        /* transport layer port , network byte ordered */

            uint32_t           sin6_flowinfo;   /* flow infomation, undefined */

            struct in6_addr  sin6_addr;    /* IPV6 address */

            uint32_t           sin6_scope_id;   /* set of interfaces for a scope  */

     };

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

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

     struct sockaddr_storage {

           uint8_t     ss_len;                    /* length of the struct */

           sa_family_t   ss_family;         /* address family: AF_xxx value */

           /*

            *implement-dependent elements to provide ........

            */

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值