How do I get the port number for a given service?
Answer / chaitanya
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;
}
| Is This Answer Correct ? | 0 Yes | 0 No |
What is a socket api?
What is a socket file?
How to find other end of unix socket connection?
How should I choose a port number for my server?
What is socket address with example?
Why does connect() succeed even before my server did an accept()?
How come select says there is data, but read returns zero?
What is LILO?
What is active unix domain sockets?
What's the difference between impact sockets and regular sockets?
What is the function of socket?
What is with the second parameter in bind()?