第11章 名字与地址转换

域名系统(Domain Name System,DNS)主要用于主机名字与IP地址之间的映射。

#include <netdb.h>

const char *hstrerror(int err);  //全局h_errno被设置错误信息

struct hostent
{
char  *h_name;       //地址的正式名称
char **h_aliases;    //地址的预备名称的指针
int    h_addrtype;   //地址类型
int    h_length;     //地址的比特长度
char **h_addr_list;  //主机网络地址指针,网络字节顺序
};
struct hostent *gethostbyname(const char *hostname);
struct hostent *gethostbyname_r(const char *hostname, struct hostent *result, char *buf, int buflen/*8192*/, int *h_errnop);
struct hostent *gethostbyaddr(const char *addr, socklen_t len, int family);
struct hostent *gethostbyaddr_r(const char *addr, int len, int type, struct hostent *result, char* buf, int buflen/*8192*/, int* h_errnop);

struct servent 
{
char  *s_name;     //正规的服务名
char **s_aliases;  //一个以空指针结尾的可选服务名队列
int    s_port;     //连接该服务时需要用到的端口号,返回的端口号是以网络字节顺序排列的
char  *s_proto;    //连接该服务时用到的协议名
};
struct servent* getservbyname(const char *servname, const char *protoname);
struct servent* getservbyport(int port, const char* protoname);

struct addrinfo 
{
    int ai_flags;      /*in*/
    int ai_family;     /*in*/
    int ai_socktype;   /*in*/
    int ai_protocol;   /*in*/ /*IPPROTO_TCP/IPPROTO_UDP*/
    socklen_t ai_addrlen;
    struct sockaddr *ai_addr;
    char *ai_canonname;
    struct addrinfo *ai_next;
};
int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result);
const char* gai_strerror(int error);     //getaddrinfo的返回值做参数
void freeaddrinfo(struct addrinfo* ai);  //形参是链表头
int getnameinfo(const struct sockaddr* sockaddr, socklen_t addrlen, char* host, socklen_t hostlen, char* serv, socklen_t servlen, int flags);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang构建HTTP服务(一)--- net/http库源码笔记

实现一个最简单HTTP server需要多少代码?只需要一行,Python2的python -m SimpleHTTPServer,ruby的ruby -run...

5005
来自专栏代码世界

Flask之wtforms

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

1285
来自专栏Play & Scala 技术分享

HTTP Cookie的域名和路径匹配

2625
来自专栏自动化测试实战

RF关键字封装

7799
来自专栏代码世界

Flask之wtforms

WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。

1043
来自专栏深度学习计算机视觉

ubuntu下curses中文输出乱码问题解决

在写Linux小游戏的时候,遇到了curses中文输出乱码,通过查阅资料和实践证明,找到了解决办法 第一步:检查头文件 将<curses.h>改成<ncurse...

2675
来自专栏猿人谷

TCP编程函数和步骤

TCP编程的服务器端一般步骤是 1、 创建一个socket,用函数socket(); 2、 设置socket属性,用函数setsockopt(); * 可选 3...

1819
来自专栏JavaQ

高并发编程-CAS深入解析

CAS(Compare and swap)直译过来就是比较和替换,是一种通过硬件实现并发安全的常用技术,底层通过利用CPU的CAS指令对缓存加锁或总线加锁的方式...

691
来自专栏蓝天

C/C++常见gcc编译链接错误解决方法

用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例: -Wl,-Bstatic -lmysq...

1743
来自专栏小灰灰

linux下socket编程

Socket soket接口是TCP/IP网络的API。网络的socket数据传输是一种特别的I/O,socket也是一种文档描述符。利用socket()函数...

2007

扫码关注云+社区