Interview Questions

How do I get the port number for a given service?

Unix Socket FAQ for Network programming


(Continued from previous question...)

How do I get the port number for a given service?

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

(Continued on next question...)

Other Interview Questions