Wie sieht's aus?
#include <netdb.h>
struct servent *getservbyname(const char *name, const char *proto);
Was tut's?
Mit getservbyname() kann man zu einem gegebenen Servicenamen (z.B. "ftp") den passenden Port ermitteln. Die Rückgabe ist ein Zeiger auf eine vom System bereitgestellte struct servent{} die in etwa so aussieht:
struct servent {
char *s_name; /* official name of service */
char **s_aliases; /* alias list */
int s_port; /* port service resides at */
char *s_proto; /* protocol to use */
};
Achtung, die Portnummer ist natürlich in Network Byte Order (siehe auch ntohs()).
Was machen die Parameter?
Der erste Parameter gibt eine Zeichenkette an, die den Servicenamen enthält.
Der zweite Parameter gibt an, um welches Transportprotokoll es sich handelt ("tcp" oder "udp" z.B.)
Wie verwende ich es?
struct servent *serv;
serv = getservbyname("ftp", "tcp");
if (!serv)
{
perror("getservbyname() failed");
return 1;
}
printf("serv->s_port = %u\n", ntohs(serv->s_port));