getservbyname()

生活百科 2023-01-25 21:22生活百科www.aizhengw.cn

getservbyname()

getservbyname()返回与给定服务名对应的包含名字和服务号信息的servent结构指针。

基本介绍

  • 中文名返回对应于给定服务名和协定名的相关服务信息
  • 外文名getservbyname()
  • name一个指向服务名的指针。
  • proto指向协定名的指针(可选)

简述

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

注释

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

结构成员

成员 用途
s_name 正规的服务名。
s_aliases 一个以空指针结尾的可选服务名伫列。
s_port 连线该服务时需要用到的连线埠号,返回的连线埠号是以网路位元组顺序排列的。
s_proto 连线该服务时用到的协定名。
返回的指针指向一个由Windows Sockets实现分配的结构。应用程式不应该试图修改这个结构或者释放它的任何部分。,每一执行绪仅有一份这个结构的拷贝,所以应用程式应该在发出其他Windows Scokets API调用前,把自己所需的信息拷贝下来。

返回值

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

例子

#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;       }

实现

Linux平台,从/etc/services档案中读取信息,一次读取name(如smtp),port(如25),proto(如tcp),alias(如mail,部分服务有,部分没有)。
上一篇:Paulini 下一篇:HBLD2-16互邦电动轮椅

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有