Von einem Service wird erwartet, dass er an einem bestimmten Port erreichbar ist und ein einziges Kommunikationsprotokoll verwendet. Diese Sicht ist innerhalb der Internet-Domäne konsistent, gilt aber nicht in anderen Netz-Architekturen. Außerdem kann ein Service an mehreren Ports erreichbar sein. In diesem Fall müssen Bibliotheksfunktionen der höheren Schichten weitergeleitet oder erweitert werden.
Die Funktion getservbyname() wandelt einen Service-Namen in eine Portnummer um. Beim Aufruf von getservbyname() wird der Service-Name und optional der Name eines qualifizierenden Protokolls übergeben.
Die Funktion getservbyport() wandelt eine Portnummer in einen Service-Namen um. Beim Aufruf von getservbyport() wird die Portnummer und optional der Name eines qualifizierenden Protokolls übergeben.
Die Funktionen getservbyname() und getservbyport() liefern als Ergebnis einen Zeiger auf ein Objekt vom Datentyp struct servent.
Die Struktur servent ist wie folgt deklariert:
struct servent { char *s_name; /* offizieller Name des Service */ char **s_aliases; /* Alias-Liste */ int s_port; /* Nummer des Ports, auf dem der Service liegt */ char *s_proto; /* verwendetes Protokoll */ };
Beispiel
Der folgende Programmcode liefert die Portnummer des Service telnet, der das TCP-Protokoll verwendet:
struct servent *sp; ... sp = getservbyname("telnet", "tcp");