Linux下网络相关结构体 struct addrinfo
来源:互联网 发布:园林设计做题软件 编辑:程序博客网 时间:2024/06/06 13:18
参考书籍:《UNIX环境高级编程》
参考连接:
http://www.cnblogs.com/benxintuzi/p/4589819.html
一、简介
结构体定义如下:
struct addrinfo{ int ai_flags; /* Input flags. */ int ai_family; /* Protocol family for socket. */ int ai_socktype; /* Socket type. */ int ai_protocol; /* Protocol for socket. */ socklen_t ai_addrlen; /* Length of socket address. */ struct sockaddr *ai_addr; /* Socket address for socket. */ char *ai_canonname; /* Canonical name for service location. */ struct addrinfo *ai_next; /* Pointer to next in list. */};
1.ai_flags
用来指定如何处理地址和名字,可取得值如下:
2.ai_family
地址族,可取的值有AF_INET(IPv4) AF_INET6(IPv6) AF_UNIX(UNIX域) AF_UNSPEC(未指定)
如下:
3.ai_socktype
socket的类型,主要有SOCK_STREA(流)M和SOCK_DGRAM(数据报)两种,其它可选如下:
4.ai_protocol
socket协议,参数如下:
在《UNIX环境高级编程》中,可以使用hint来过滤上面的结构体,仅使用ai_family、ai_flags、ai_protocol和ai_socktype字段,剩余的整数字段必须设置为零,并且指针字段为空。
二、代码展示
1)相关函数
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res);void freeaddrinfo(struct addrinfo *res);const char *gai_strerror(int errcode);int getnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags);
2)getaddrinfo
此函数主要用来替代gethostbyname函数
1.代码
#include <stdlib.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <string.h>#include <stdio.h>int main(int argc, char **argv){ int ret = -1; struct addrinfo *res; struct addrinfo hint; struct addrinfo *curr; char ipstr[16]; if (argc != 2) { printf("parameter error\n"); return -1; } bzero(&hint, sizeof(hint)); hint.ai_family = AF_INET; hint.ai_socktype = SOCK_STREAM; ret = getaddrinfo(argv[1], NULL, &hint, &res); if (ret != 0) { printf("getaddrinfo error\n"); return -1; } for (curr = res; curr != NULL; curr = curr->ai_next) { inet_ntop(AF_INET,&(((struct sockaddr_in *)(curr->ai_addr))->sin_addr), ipstr, 16); printf("%s\n", ipstr); } freeaddrinfo(res); return 0;}
2.运行
$ ./test www.baidu.com14.215.177.3814.215.177.39
阅读全文
0 0
- Linux下网络相关结构体 struct addrinfo
- struct addrinfo结构体
- struct addrinfo结构体详解
- Linux下网络相关结构体 struct hostent
- Linux下网络相关结构体 struct netent
- Linux下网络相关结构体 struct protoent
- Linux下网络相关结构体 struct servent
- struct addrinfo结构体获取ip和port
- linux下与实践相关的结构体 struct timeb,struct timeval ,struct timezone,struct timespec,struct tm 等
- linux下与时间相关的结构体 struct timeb,struct timeval ,struct timezone,struct timespec,struct tm 等
- socket编程总结(三) struct sockaddr_in /struct sockaddr_in6/struct addrinfo 结构体
- addrinfo结构体详解
- addrinfo的结构体
- Linux网络编程--struct hostent结构体
- Linux网络编程--struct hostent结构体
- Linux网络编程--struct hostent结构体
- Linux下struct timeval结构体
- addrinfo结构体与getaddrinfo函数
- LeetCode.64 Minimum Path Sum
- 第一次实习面试经历--豆果美食
- 第三次作业
- 习题1
- Java:三角形的判定
- Linux下网络相关结构体 struct addrinfo
- [卷积 组合 线性筛] 51nod1769 Clarke and math2
- NB-IoT移远BC95调试笔记 02 CoAP协议
- PAT乙级1003. 我要通过!(20)
- Java GUI之MouseListener、MouseMotionListener
- gridview多条目加载适配器
- p59第一题
- C#227课的主要内容
- Dijkstra HDU 3790