一、gethostbyname函数原型

#include <netdb.h>struct hostent *gethostbyname(const char *ghostname);返回:成功返回非空指针,出错为NULL且设置h_errno

二、hostent结构

struct hostent {char  *h_name;        /*  official name of host */char  **h_aliases;    /*  pointer to array of pointers to alias name */int     h_addrtype;   /*  host address type: AF_INET */int     h_length;     /*  length of address: 4 */char  **h_addr_list;  /*  ptr to array of ptrs with IPv4 addrs */
}; 

三、关于全局整体变量h_errno

  当gethostbyname发生错误时,它不设置errno变量,而是将全局变量h_errno设置为<netdb.h>中定义的下列常值之一:

  (1)HOST_NOT_FOUND;

  (2)TRY_AGAIN;

  (3)NO_RECOVERY;

  (4)NO_DATA(等同于NO_ADDRESS)

  NO_DATA错误表示指定的名字有效,但是它没有A记录

四、gethostbyname例子

#include    <stdio.h>
#include    <netdb.h>
#include    <stdlib.h>
#include    <sys/socket.h>
#include    <arpa/inet.h>#define     INET_ADDRSTRLEN     16void err_ret(const char *, ...);
void err_msg(const char *, ...);int main(int argc, char **argv)
{char    *ptr, **pptr;char    str[INET_ADDRSTRLEN];struct hostent    *hptr;while (--argc > 0) {ptr = *++argv;if ( (hptr = gethostbyname(ptr)) == NULL) {err_msg("gethostbyname error for host: %s: %s",ptr, hstrerror(h_errno));continue;}printf("official hostname: %s\n", hptr->h_name);for (pptr = hptr->h_aliases; *pptr != NULL; pptr++) {printf("\talias: %s\n", *pptr);}switch (hptr->h_addrtype) {case AF_INET: {pptr = hptr->h_addr_list;for ( ; *pptr != NULL; pptr++) {printf("\taddress: %s\n",inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));}break;}default: {err_ret("unknown address type");break;}}}exit(0);
}

#include    <stdio.h>
#include    <errno.h>
#include    <stdlib.h>
#include    <string.h>
#include    <stdarg.h>        /* ANSI C header file */
#include    <syslog.h>        /* for syslog() */#define     MAXLINE     4096int        daemon_proc;        /* set nonzero by daemon_init() */static void    err_doit(int, int, const char *, va_list);/* Nonfatal error related to system call* Print message and return */void err_ret(const char *fmt, ...) {va_list        ap;    va_start(ap, fmt);    err_doit(1, LOG_INFO, fmt, ap);va_end(ap);return;
}/* Fatal error related to system call* Print message and terminate */void err_sys(const char *fmt, ...) {va_list        ap;va_start(ap, fmt);err_doit(1, LOG_ERR, fmt, ap);va_end(ap);exit(1);
}/* Fatal error related to system call* Print message, dump core, and terminate */void err_dump(const char *fmt, ...) {va_list        ap;va_start(ap, fmt);err_doit(1, LOG_ERR, fmt, ap);va_end(ap);abort();        /* dump core and terminate */exit(1);        /* shouldn't get here */
}/* Nonfatal error unrelated to system call* Print message and return */void err_msg(const char *fmt, ...) {va_list        ap;va_start(ap, fmt);err_doit(0, LOG_INFO, fmt, ap);va_end(ap);return;
}/* Fatal error unrelated to system call* Print message and terminate */void err_quit(const char *fmt, ...) {va_list        ap;va_start(ap, fmt);err_doit(0, LOG_ERR, fmt, ap);va_end(ap);exit(1);
}/* Print message and return to caller* Caller specifies "errnoflag" and "level" */static void err_doit(int errnoflag, int level, const char *fmt, va_list ap) {int        errno_save, n;char    buf[MAXLINE + 1];errno_save = errno;        /* value caller might want printed */
#ifdef    HAVE_VSNPRINTFvsnprintf(buf, MAXLINE, fmt, ap);    /* safe */
#elsevsprintf(buf, fmt, ap);                /* not safe */
#endifn = strlen(buf);if (errnoflag)snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));strcat(buf, "\n");if (daemon_proc) {syslog(level, buf);} else {fflush(stdout);        /* in case stdout and stderr are the same */fputs(buf, stderr);fflush(stderr);}return;
}

五、gethostbyaddr函数原型

#include <netdb.h>struct hostent *gethostbyaddr(const struct in_addr *, socklen_t, int family);返回:成功为非空指针,否则为NULL且设置h_errno    功能:由一个二进制IP地址找到相应的主机名

转载于:https://www.cnblogs.com/soldierback/p/10740342.html

gethostbyname和gethostbyaddr相关推荐

  1. Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr

    1.数据结构hostent和servent: struct hostent{ char *h_name;/* official domain name of host */ char **h_alia ...

  2. (域名、主机名、服务名、端口号)名字与地址的转换 (gethostbyname、getservbyname、getaddrinfo、getnameinfo等)

    转载地址 本章讲述在名字和数值地址间进行转换的函数:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务器 ...

  3. Linux socket 网络编程 常用头文件

    一 三种类型的套接字: 1.流式套接字(SOCKET_STREAM) 提供面向连接的可靠的数据传输服务.数据被看作是字节流,无长度限制.例如FTP协议就采用这种. 2.数据报式套接字(SOCKET_D ...

  4. UNP总结 Chapter 11 名字与地址转换

    本章讲述在名字和数值地址间进行转换的函数:gethostbyname和gethostbyaddr在主机名字与IP地址间进行转换,getservbyname和getservbyport在服务器名字和端口 ...

  5. UNP Chapter 11 - 高级名字与地址转换

    11.1. 概述 函数gethostbyname和gethostbyaddr是依赖于协议的,使用前一个函数时,我们必须知道放置结果的套接口地址结构的成员是哪一种(举例来说,IPv4使用sin_addr ...

  6. 《UNIX环境编程》第十六章--网络IPC:套接字

    Contents 套接字接口 套接字描述符 寻址 字节序 地址格式 地址查询 绑定地址 建立连接 数据传输 套接字选项 带外数据 UNIX域套接字 使用套接字的示例 面向连接的ruptime 无连接的 ...

  7. (转载)IP,主机名,域名

    参考自 IP,主机和域名 Content 在网络通信中,每个IP可唯一表示一台主机,在多网卡或者路由器等的情况下,每个主机可以有多个IP,通过哪个IP都可以找到该主机;但是IP地址是一个32位的数字, ...

  8. 20145217信息安全系统设计基础第11周学习总结

    一.知识点梳理 (一)异常控制流概述 控制转移:从一条指令到下一条指令的过渡. 控制流:控制转移序列. 最简单的控制流:平滑的序列,每条指令在存储器中都是相邻的. 平滑流的突变:由于跳转.调用和返回等 ...

  9. 网络编程学习笔记(RES_USE_INET6解析器选项)

    通过这个选项来通知解析器让gethostbyname返回IPv6地址而不是IPv4地址 1.应用 程序本身可以设置此选项,首先调用解析器的res_init函数,然后打开该选项: #include &l ...

最新文章

  1. cameraraw面板大小调整_Camera Raw基础操作面板介绍
  2. Android Linux自带iptables配置IP访问规则
  3. HDU4259(简单群置换)
  4. 腾讯吃鸡 android,腾讯吃鸡手游《光荣使命》正式上线:安卓/iOS不限号测试
  5. input=file 浏览时只显示指定excel文件,筛选特定文件类型
  6. [Matlab] PDETool 的 Set Formula 的元素排列顺序会影响 Boundary 的判定
  7. SetTimeout(延迟计时器)
  8. 怎么彻底卸载cad2017_怎么彻底卸载删除cad
  9. python股票量化交易(4)---金叉与死叉
  10. win10总显示打印机未连接服务器,win10系统打印机共享提示连接失败的解决方法...
  11. 【调剂】2020燕山大学电气工程学院“智能信息处理”课题组研究生招生及调剂信息发布了!...
  12. 女生可以做软件测试吗?
  13. 南昌大学超级计算机,南昌大学-理学院
  14. 送书|逆向系列-你一定要懂的MD5加密
  15. 白盒测试重点复习内容
  16. 【今日CV 计算机视觉论文速览】 26 Mar 2019
  17. Java CAS操作的实现原理深度解析与应用案例
  18. 学习的Python的第五天
  19. 微信小程序 手写签名_微信小程序实现手写签字
  20. 2022全球「高被引科学家」榜单出炉!中国内地1169人入选,紧追美国

热门文章

  1. 江苏辖区农商银行2020年(科技类)
  2. prometheus+alertmanager+webhook实现自定义监控报警系统
  3. 迅捷画图中套用流程图模板编辑方法介绍
  4. SpringBoot 启动类 @SpringBootApplication 注解 以及执行流程
  5. 如何求地球上两点之间的最短距离_初中数学求线段之和最小的问题,知识点题型汇总...
  6. (转)腾讯区块链方案白皮书:底层技术平台及五大场景解决方案
  7. GWO灰狼优化算法综述(Grey Wolf Optimization)
  8. 蜜蜂路线图c语言思路,打蜜蜂(c语言)(Hit the bee (C language)).doc
  9. ext表格内容自动换行
  10. 语义分割中的mIoU计算函数解读