getservbyname()

编辑:调运网互动百科 时间:2020-03-30 23:39:21
编辑 锁定
getservbyname()返回与给定服务名对应的包含名字和服务号信息的servent结构指针
中文名
返回对应于给定服务名和协议名的相关服务信息
外文名
getservbyname()
name:
 一个指向服务名的指针
proto:
 指向协议名的指针(可选)

getservbyname()简述

编辑
返回对应于给定服务名和协议名的相关服务信息。
#include <windows.h>
struct servent FAR * PASCAL FAR getservbyname(const char
Far * name, const char FAR *proto);
name: 一个指向服务名的指针
proto: 指向协议名的指针(可选)。如果这个指针为空,getservbyname()返回第一个name与s_name或者某一个s_aliases匹配的服务条目。否则getservbyname()对name和proto都进行匹配。

getservbyname()注释

编辑
getservbyname()返回与给定服务名对应的包含名字和服务号信息的servent结构指针。结构的声明如下:
struct servent {
char FAR * s_name;
char Far * FAR * s_aliases;
short s_port;
char FAR * s_proto;
};

getservbyname()结构成员

编辑
成员 用途
s_name 正规的服务名。
s_aliases 一个以空指针结尾的可选服务名队列。
s_port 连接该服务时需要用到的端口号,返回的端口号是以网络字节顺序排列的。
s_proto 连接该服务时用到的协议名。
返回的指针指向一个由Windows Sockets实现分配的结构。应用程序不应该试图修改这个结构或者释放它的任何部分。此外,每一线程仅有一份这个结构的拷贝,所以应用程序应该在发出其他Windows Scokets API调用前,把自己所需的信息拷贝下来。

getservbyname()返回值

编辑
如果没有错误发生,getservbyname()返回如上所述的一个指向servent结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码。
WSANOTINITIALISED 在应用这个API前,必须成功地调用WSAStartup()。
WSAENETDOWN Windows Sockets实现检测到了网络子系统的错误。
WSAHOST_NOT_FOUND 没有找到授权应答主机。
WSANO_DATA 有效的名字,但没有关于请求类型的数据记录。
WSAEINPROGRESS 一个阻塞的Windows Sockets操作正在进行。
WSAEINTR 阻塞调用被WSACancelBlockingCall()取消了.

getservbyname()例子

编辑
#include "netdb.h"
#include "stdio.h"
int main()
{
        struct servent *se = NULL;
        int i = 0;
        
        se = getservbyname("domain", "udp");
        if (!se)         
               return -1;  
                     
        printf("name : %s\n", se->s_name);
        printf("port : %d\n", ntohs(se->s_port));
        printf("proto : %s\n", se->s_proto);
        for (i = 0; se->s_aliases[i]; i++)
            printf("aliases : %s\n", se->s_aliases[i]);
        
        return 0;
       
}

getservbyname()实现

编辑
Linux平台,从/etc/services文件中读取信息,一次读取name(如smtp),port(如25),proto(如tcp),alias(如mail,部分服务有,部分没有)。
词条标签:
计算机学