C语言socket编程总结(三) struct sockaddr_in /struct sockaddr_in6/struct addrinfo 结构体

//lb

IPV4:

//struct sockaddr_in {

//    __uint8_t sin_len;

//    sa_family_t sin_family;//iPv4地址族

//    in_port_t sin_port;     //端口号

//    struct in_addr sin_addr;//IPV4 address

//    char sin_zero[8];

//};


lb

IPV6:

//  struct sockaddr_in6 {

//  __uint8_t sin6_len;    /* length of this struct(sa_family_t) */

//  sa_family_t sin6_family;/* AF_INET6 (sa_family_t) */

//  in_port_t sin6_port;    /* Transport layer port # (in_port_t) */

// __uint32_t sin6_flowinfo;/* IP6 flow information */

// struct in6_addr sin6_addr;/* IP6 address */

//  __uint32_t sin6_scope_id;/* scope zone index */

//                      };


lb

getAddrInfo中的参数:

//  struct addrinfo {

//         int ai_flags;/* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */

//        int ai_family;/* PF_xxx */地址族,

//        int ai_socktype;/* SOCK_xxx */套接字类型

//        int ai_protocol;/* 0 or IPPROTO_xxx for IPv4 and IPv6 */协议类型

//        socklen_t ai_addrlen; /* length of ai_addr */指向缓冲区的字节数

//        char *ai_canonname;/* canonical name for hostname */主机的规范化名称

//        struct sockaddr *ai_addr;/* binary address */指向sockaddr结构的指针。getaddrinfo返回的每个addrinfo结构内的ai_addr都指向一个filled-in套接字地址结构。



//        struct addrinfo *ai_next;/* next structure in linked list */指向链表中下一个addrinfo结构的指针,如果是链表的最后一个addrinfo结构,则ai_nextNULL



//    };


lb

转换IPV4和IPV6:


/**

int  getaddrinfo(

 

 const char* nodename,//传的是主机地址的字符串;

 

 const char* servname,

 

 const struct addrinfo* hints,

 

 struct addrinfo** res

 

 );

 

 *  nodename:节点名可以是主机名,也可以是数字地址。(IPV410进点分,或是IPV616进制)

 

 *  servname:包含十进制数的端口号或服务名如(ftp,http

 

 *  hints:是一个空指针或指向一个addrinfo结构的指针,由调用者填写关于它所想返回的信息类型的线索。

 

 *  res:存放返回addrinfo结构链表的指针,指向由一个或多个addrinfo结构体组成的链表,包含了主机的响应信息

 * 返回值:成功返回0,失败返回非零的 sockets error code

 

 */

lb




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值