getaddrinfo函数
来源:互联网 发布:centos 目录结构 编辑:程序博客网 时间:2024/05/16 17:37
这几天在看公司代码的时候,遇到gethostbyname函数。在查看过程中,发现这是一个“过时的”函数,已经被替代为getaddrinfo。因此转为主要研究getaddrinfor函数。
首先来看getaddrinfo在man中的定义:
#include <sys/types.h> #include <sys/socket.h> #include <netdb.h> int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);
对于函数的参数,结合APUE和man手册,node为主机名字,service为服务名字,这两个至少要提供一个。如果仅仅提供一个,则另一个要为NULL。主机名可以是hostname,也可以是点分制表示的主机地址。service可以为服务名字(/etc/services)也可以是端口号(字符串)。
getaddrinfo函数根据提供的hints来选择地址,返回一个结构为addrinfo的链表。可以用freeaddrinfo来释放一个或多个这种结构。hints类似一个用户过滤的模板,仅使用结构体中的ai_family, ai_flags, ai_protocol和ai_socktype字段,其余字段根据其性质置为0或NULL。
下面是addrinfo结构体:
struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; };
ai_family:AF_INET或者AF_INT6。
ai_socktype:SOCK_STREAM或者SOCK_DGRAM。
ai_protocal:0表示任意协议。
ai_flags比较复杂,包括以下:
AI_ALL:查找IPv4,IPv6地址。AI_CANONNAME:需要一个规范名,而不是别名。AI_NUMERICHOST:以数字形式返回主机地址。AI_NUMERICSERV:同上。AI_PASSIVE:套接字地址用户监听。
如果getaddrinfo函数调用失败,需要用gai_strerror函数返回错误原因:
const char *gai_strerror(int errcode);
- getaddrinfo函数
- getaddrinfo函数
- getaddrinfo函数
- 函数getaddrinfo()
- getaddrinfo函数
- getaddrinfo函数
- getaddrinfo 函数
- getaddrinfo函数
- getaddrinfo函数
- 函数getaddrinfo()
- getaddrinfo函数
- 关于 getaddrinfo 函数
- getaddrinfo函数原型
- getaddrinfo()函数详解
- getaddrinfo()函数详解
- getaddrinfo()函数详解
- getaddrinfo函数详解
- getaddrinfo函数详解
- 冒泡排序算法
- 朴素字符串匹配——算法导论
- Perl文本替换命令
- CxImage学习
- 用Winsock实现语音全双工通信使用
- getaddrinfo函数
- android如何提升性能技巧(下)
- IOS开发过程中实现页面调转常用的方法
- java jdk环境变量配置
- SQL 多表联合查询
- DirectFB的接口详解
- C语言经典小程序
- android socket 编程总结
- ROW_NUMBER() OVER函数的简单用法