/*
1. 网络环境中服务器需要一个唯一的IP地址和一个主机名(域名),大多数情况,我们知道域名,而不会去记住IP,
基于此需要进行域名到IP的转换
2.getaddrinfo函数,将一个主机名和一个服务器名映射到一个地址.注意这两个名字必须再DNS服务器中注册过,
第三个参数是一个地址过滤模板,通常情况下不过滤,NULL,第4个参数为可用的通信地址信息结构列表.
*/
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <arpa/inet.h>
void print_flags(const struct addrinfo *aip)
{
if(aip->ai_flags == 0)
{
printf("0");
}
else
{
if(aip->ai_flags & AI_PASSIVE)
{
printf("AI_PASSIVE ");
}
if(aip->ai_flags & AI_CANONNAME)
{
printf("AI_CANONNAME ");
}
if(aip->ai_flags & AI_NUMERICHOST)
{
printf("AI_NUMERICHOST ");
}
#if defined(AI_V4MAPPED)
if(aip->ai_flags & AI_V4MAPPED)
{
printf("AI_V4MAPPED ");
}
#endif
#if defined(AI_ALL)
if(aip->ai_flags & AI_ALL)
{
printf("AI_ALL ");
}
#endif
#if defined(AI_ADDRCONFIG)
if(aip->ai_flags & AI_ADDRCONFIG)
{
printf("AI_ADDRCONFIG ");
}
#endif
#if defined(AI_NUMERICSERV)
if(aip->ai_flags & AI_NUMERICSERV)
{
printf("AI_NUMERICSERV ");
}
#endif
}
}
void print_family(const struct addrinfo *aip)
{
switch(aip->ai_family)
{
case AF_INET:
printf("inet");
break;
case AF_INET6:
printf("inet6");
break;
case AF_UNIX:
printf("unix");
break;
case AF_UNSPEC:
printf("unspecified");
break;
default:
printf("unknown");
break;
}
}
void print_socktype(const struct addrinfo *aip)
{
网络编程基础7-主机名或服务名到IP地址的映射getaddrinfo
最新推荐文章于 2024-03-04 11:09:09 发布