首页 > 其他 > 详细

socket网络编程----addrinfo结构体和getaddrinfo函数介绍

时间:2016-01-11 22:09:57      阅读:166      评论:0      收藏:0      [点我收藏+]

1 socket网络编程—addrinfo结构体定义:

 1 struct addrinfo {
 2 
 3 int ai_flags; /* customize behavior */
 4 
 5 int ai_family; /* address family */
 6 
 7 int ai_socktype; /* socket type */
 8 
 9 int ai_protocol; /* protocol */
10 
11 socklen_t ai_addrlen; /* length in bytes of address */
12 
13 struct sockaddr *ai_addr; /* address */
14 
15 char *ai_canonname; /* canonical name of host */
16 
17 struct addrinfo *ai_next; /* next in list */
18 
19 ......20  };

其中主要参数:

ai_family指定了地址族,可取值如下:
AF_INET          2            IPv4
AF_INET6        23            IPv6
AF_UNSPEC        0            协议无关

ai_socktype指定我套接字的类型
SOCK_STREAM        1            流
SOCK_DGRAM        2            数据报

在AF_INET通信域中套接字类型SOCK_STREAM的默认协议是TCP(传输控制协议)
在AF_INET通信域中套接字类型SOCK_DGRAM的默认协议是UDP(用户数据报协议)

2 getaddrinfo函数介绍

getaddrinfo解决了把主机名和服务名转换成套接口地址结构的问题。POSIX中的函数原型:

#include<netdb.h>
int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );
返回0: 成功

返回非0: 出错


其中相关参数:
hostname:一个主机名或者地址串(IPv4的点分十进制串或者IPv6的16进制串)
service:一个服务名或者10进制端口号数串。
hints: 可以是一个空指针,也可以是一个指向某个addrinfo结构的指针,调用者在这个结构中填入关于期望返回的信息类型的暗示。举例来说:如果指定的服务既 支持TCP也支持UDP,那么调用者可以把hints结构中的ai_socktype成员设置成SOCK_DGRAM使得返回的仅仅是适用于数据报套接口的信息。

result指针参数返回一个指向addrinfo结构链表的指针

http://blog.chinaunix.net/uid-26583794-id-3167485.html

 

socket网络编程----addrinfo结构体和getaddrinfo函数介绍

原文:http://www.cnblogs.com/shaosli/p/5121752.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!