获取主机信息的函数
函数介绍
gethostbyname函数根据主机名获取主机的完整信息。它通常是先在本地的/etc/hosts配置文件中查找主机,没有找到,再去访问DNS服务器。gethostbyaddr函数根据主机地址获取主机的完整信息。
1 | #include <netdb.h> |
参数介绍
name参数指定目标主机的主机名。
addr参数指定目标主机的IP地址,len参数与指定addr所指的IP地址长度,type参数指定addr所指IP地址的类型,其合法取值包括:AF_INET和AF_INET6。
返回值
两个函数的返回值都是hostent结构体类型的指针,hostent结构体的定义如下:
1 | #include <netdb.h> |
获取某个服务的信息
函数介绍
getservbyname函数根据名称来获取某个服务的完整信息,getservbyport函数根据端口号获取某个服务的完整信息。它们实际上都是通过读取/etc/services文件来获取服务的信息的。
1 | #include <netdb.h> |
参数介绍
name参数指定目标服务的名字。
port参数指定目标服务对应的端口号。proto参数指定服务类型,给它传递“tcp”表示获取流服务,给它传递“udp”表示获取数据报服务,给它传递NULL则表示获取所有类型的服务。
函数返回值
这两个函数都是返回servent结构体类型指针,servent结构体定义如下:
1 | struct servent |
总结
上面的这个四个函数都是不可重入的,也就是非线程安全的。不过netdb.h头文件给出它们的可重入版本。只需要在这些函数的原函数名尾部加上_r。例如:
1 | gethostbyname_r |