1.

How Do I Get The Port Number For A Given Service?

Answer»

Use the getservbyname() routine. This will return a pointer to a servent structure. You are interested in the s_port field, which contains the PORT number, with correct byte ordering (so you don't NEED to call htons() on it). Here is a sample routine.

/* Take a service name, and a service type, and return a port number. If the service name is not found, it tries it as a decimal number. The number returned is byte ordered for the network. */

int atoport(char *service, char *proto)

{

int port;

long int lport;

STRUCT servent *serv;

char *errpos;

/* First try to READ it from /etc/services */

serv = getservbyname(service, proto);

if (serv != NULL)

port = serv->s_port;

else { 

/* Not in services, maybe a number? */

lport = strtol(service,&errpos,0);

if ( (errpos[0] != 0) || (lport < 1) 

|| (lport > 5000) )

return -1; 

/* Invalid port address */

port = htons(lport);

}

return port;

}

Use the getservbyname() routine. This will return a pointer to a servent structure. You are interested in the s_port field, which contains the port number, with correct byte ordering (so you don't need to call htons() on it). Here is a sample routine.

/* Take a service name, and a service type, and return a port number. If the service name is not found, it tries it as a decimal number. The number returned is byte ordered for the network. */

int atoport(char *service, char *proto)

{

int port;

long int lport;

struct servent *serv;

char *errpos;

/* First try to read it from /etc/services */

serv = getservbyname(service, proto);

if (serv != NULL)

port = serv->s_port;

else { 

/* Not in services, maybe a number? */

lport = strtol(service,&errpos,0);

if ( (errpos[0] != 0) || (lport < 1) 

|| (lport > 5000) )

return -1; 

/* Invalid port address */

port = htons(lport);

}

return port;

}



Discussion

No Comment Found