/*
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
最新推荐文章于 2020-12-16 22:11:30 发布
本文深入探讨了网络编程中的getaddrinfo函数,它用于将主机名或服务名转换为IP地址。通过理解这个过程,开发者可以更好地处理网络连接和解析问题。

最低0.47元/天 解锁文章
5234

被折叠的 条评论
为什么被折叠?



