gethostbyname()

编辑:调运网互动百科 时间:2020-04-03 03:26:29
编辑 锁定
gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostbyaddr()中一致。
中文名
gethostbyname()函数
表达式
网络信息查询函数
应用学科
计算机编程
功    能
得到主机名字和地址信息的指针

gethostbyname()简述

编辑
返回对应于给定主机名的主机信息。
#include<winsock2.h>
structhostentFAR*PASCALFARgethostbyname(constcharFAR*name);
name:指向主机名的指针
返回类型
structhostent
{
charFAR*h_name;
charFAR*FAR*h_aliases;
shorth_addrtype;
shorth_length;
charFAR*FAR*h_addr_list;
};
#include<netdb.h>
structhostent*gethostbyname(constchar*hostname);
返回:非空指针——成功,空指针——出错,同时设置h_errno

gethostbyname()源码

编辑
struct hostent* gethostbyname(const char *name)
{
err_t err;
ip_addr_t addr;
/* buffer variables for lwip_gethostbyname() */
HOSTENT_STORAGE struct hostent s_hostent;
HOSTENT_STORAGE char *s_aliases;
HOSTENT_STORAGE ip_addr_t s_hostent_addr;
HOSTENT_STORAGE ip_addr_t *s_phostent_addr[2];
/* query host IP address */
err = netconn_gethostbyname(name, &addr);
if (err != ERR_OK) {
LWIP_DEBUGF(DNS_DEBUG, ("lwip_gethostbyname(%s) failed, err=%d\n", name, err));
h_errno = HOST_NOT_FOUND;
return NULL;
}

gethostbyname()注释

编辑
gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostbyaddr()中一致。
返回的指针指向一个由Windows Sockets实现分配的结构。应用程序不应该试图修改这个结构或者释放它的任何部分。此外,所有线程共用一份这个结构的拷贝(这里应该是每个线程一份拷贝,原文是这样的Furthermore, only one copy of this structure is allocated per thread, so the application should copy any information it needs before issuing any other Windows Sockets function calls.),所以应用程序应该在发出其他Windows Scokets API调用前,把自己所需的信息拷贝下来。
gethostbyname()实现没有必要识别传送给它的IP地址串。对于这样的请求,应该把IP地址串当作一个未知主机名同样处理。如果应用程序有IP地址串需要处理,它应该使用inet_addr()函数把地址串转换为IP地址,然后调用gethostbyaddr()来得到hostent结构。

gethostbyname()返回值

编辑
如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码

gethostbyname()错误代码

编辑
WSANOTINITIALISED 在应用这个API前,必须成功地调用WSAStartup()。
WSAENTDOWN Windows Sockets实现检测到了网络子系统的错误。
WSAHOST_NOT_FOUND 没有找到授权应答主机
WSATRY_AGAIN 没有找到非授权主机,或者SERVERFAIL。
WSANO_RECOVERY 无法恢复的错误,FORMERR,REFUSED,NOTIMP。
WSANO_DATA 有效的名字,但没有关于请求类型的数据记录。
WSAEINPROGRESS 一个阻塞的Windows Sockets操作正在进行。
WSAEINTR 阻塞调用被WSACancelBlockingCall()取消了.
需要注意的是gethostbyname()函数属于WinSock API库,而在使用WinSock API之前,必须调用WSA-Startup函数,只有该函数成功返回(表示应用程序与WinSock库成功地建立起连接),应用程序才可以调用其他Windows Sockets DLL中的函数。当程序将要结束时,又必须调用WSACleanup 函数进行清理工作,以便释放其占用的资源。WSACleanup 函数用来结束Windows Sockets DLL的使用。
词条标签:
计算机学