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