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


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM