16.2.2 数据库函数
Windows Socket规范中定义了一组专门用于处理域名、通信服务和通信协议等网络信息的数据库函数。使用这些函数可以获取网络能力的检测,使用getXbyY的函数形式,含义是通过Y值获取X值。主要包括如下7个函数。
(1)gethostname()函数:返回本地主机的机器名称。其函数原型为:
- int gethostname(char FAR * name, // 存放
返回的主机名称的缓冲区的指针 - int namelen); // 存放缓冲区的长度
此函数返回本地主机的机器名称到name参数指定的缓冲区中,返回的主机名是以NULL结束的字符串。返回的主机名的形式,可能是简单的主机名也可能是完整的域名称。如果函数调用成功,则返回0,否则返回SOCKET_ERROR和相应的错误代码,使用WSAGet LastError()函数可以获取错误代码的值。
(2)gethostbyaddr()函数:根据网络地址获取主机信息。其函数原型为:
- struct HOSTENT FAR * gethostbyaddr ( const char FAR * addr,
-
// 网络字节顺序的地址指针 - int len,
// addr参数的长度 - int type);
// 指定地址的类型
以函数返回一个HOSTENT结构的指针,其中包含传入的网络地址对应的名称和地址,所有数据都是以NULL结束。如果返回值为NULL,表示函数调用失败。
(3)gethostbyname()函数:从主机数据库中根据主机名称获取主机信息。其函数原型为:
- struct hostent FAR * gethostbyname ( const char FAR * name );
- // 以NULL结束的主机名称
以函数返回一个指向HOSTENT结构的指针,结构中的name参数中包含查询到的结果值。如果返回值为NULL,表示函数调用失败。
(4)getprotobyname()函数:根据协议名称获取协议信息。其函数原型为:
- struct PROTOENT FAR * getprotobyname ( const char FAR * name );
- // 以NULL结束的协议名的指针
以函数返回name参数指定的包含协议名和协议号的PROTOENT结构指针。如果返回值为NULL,表示函数调用失败。
(5)getprotobynumber()函数:根据协议号获取协议信息。其函数原型为:
- struct PROTOENT FAR * getprotobynumber ( int number );
- // 要查询的协议的主机字节顺序的协议号
以函数返回包含协议名和协议号的PROTOENT结构指针。如果返回值为NULL,表示函数调用失败。
(6)getservbyname()函数:根据服务器名和协议获取服务器信息。其函数原型为:
- struct servent FAR * getservbyname (
- const char FAR * name, // 指向服务器
名称的以NULL结束的字符串的指针 - const char FAR * proto); // 指向协议名
的以NULL结束的字符串的指针
以函数返回包含服务名称和服务号的SERVENT结构的指针。如果返回值为NULL,表示函数调用失败。
(7)getservbyport()函数:根据端口号和协议获取服务信息。其函数原型为:
- struct servent FAR * getservbyport ( int port,
- // 指定网络字节顺序的服务的端口
- const char FAR* proto); // 协议名指针
以函数返回包含服务名称和服务号的SERVENT结构的指针。如果返回值为NULL,表示函数调用失败。
上面这些函数是用于获取有关网络方面的通信、协议、域名等方面的信息的数据库函数。用户可以使用这些函数查询到socket程序所使用的网络资源信息。在socket程序中需要使用这些函数配合socket()函数完成socket通信功能。