socket编程之addrinfo结构体与getaddrinfo函数

addrinfo结构体的定义如下:

  1. struct addrinfo {
  2.      int ai_flags; /* customize behavior */
  3.      int ai_family; /* address family */
  4.      int ai_socktype; /* socket type */
  5.      int ai_protocol; /* protocol */
  6.      socklen_t ai_addrlen; /* length in bytes of address */
  7.      struct sockaddr *ai_addr; /* address */
  8.      char *ai_canonname; /* canonical name of host */
  9.      struct addrinfo *ai_next; /* next in list */
  10.      .
  11.      .
  12.      .
  13.    };
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(用户数据报协议)

ai_protocol指定协议类型。可取的值取决于ai_address和ai_socktype的值

ai_flags指定了如何来处理地址和名字,可取值如下:

QQ截图20120409193145

getaddrinfo函数 定义及需要的头文件如下:

  1. #include <sys/socket.h>
  2. #include <netdb.h>
  3. int getaddrinfo(const char *restrict host,
  4.                 const char *restrict service,
  5.                 const struct addrinfo *restrict hint,
  6.                 struct addrinfo **restrict res);
  7. Returns: 0 if OK, nonzero error code on error
  8. void freeaddrinfo(struct addrinfo *ai);
getaddrinfo函数允许将一个主机名字和服务名字映射到一个地址。
posted @ 2013-07-05 12:37  z折腾  阅读(569)  评论(0编辑  收藏  举报