getservbyname()

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()取消了.

例子

#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,部分服務有,部分沒有)。

相關詞條

熱門詞條

聯絡我們