![]() Chapter Contents  | 
![]() Previous  | 
![]() Next  | 
| getservbyname | 
| Portability: | UNIX compatible | 
| SYNOPSIS | |
| DESCRIPTION | |
| RETURN VALUE | |
| CAUTION | |
| PORTABILITY | |
| IMPLEMENTATION | |
| EXAMPLE | |
| RELATED FUNCTIONS | 
| SYNOPSIS | 
#include <netdb.h> struct servent *getservbyname(const char *name, const char *proto);
| DESCRIPTION | 
Given the name of a well-known service,
pointed to by 
name
, and
a protocol string for accessing that service, pointed to by 
proto
, 
getservbyname
 returns a pointer to the 
servent
 structure, which is defined in 
<netdb.h>
. This structure is typically used to obtain the port for
the service from the 
serv_port
 field.  The source of the data in this structure is the services file,
that is, a file with the same format as the 
/etc/services
 file on a UNIX operating system.  Refer to <netdb.h> for details on the 
servent
structure.
Refer to Search Logic for information on the logic used to determine the location of the services file.
| RETURN VALUE | 
If 
getservbyname
 succeeds, it returns a pointer to the 
servent
 structure. A null pointer indicates an
error or an end-of-file.
| CAUTION | 
The value that 
getservbyname
 returns points to a static structure within the library.
 You must copy the information from this structure before you make further 
getservbyname
, 
getservbyport
, or 
getservent
 calls.
| PORTABILITY | 
getservbyname
 is portable to other environments, including most UNIX
systems, that implement BSD sockets.
| IMPLEMENTATION | 
getservbyname
 is ported directly from the BSD UNIX Socket Library.
| EXAMPLE | 
This program uses the socket call, getservbyname to obtain the structure,  
servent
. In most cases the returned structure is used to obtain the
port for the service. 
getservbyname
 reads the prefix.ETC.SERVICES file. The 
prefix
.ETC.SERVICES file must be properly configures
on the local host; where prefix is described in Network Administration. The input parameters are case
sensitive.
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <stdio.h>
main(int argc, char *argv[])
{
   struct servent *serv;
   if (argc < 3) {
      puts("Incorrect parameters. Use:");
      puts("   gsbnm service-name protocol-name");
      return EXIT_FAILURE;
   }
   /* getservbyname() - opens the etc.services file and returns the */
   /* values for the requested service and protocol.                */
   serv = getservbyname(argv[1], argv[2]);
   if (serv == NULL) {
      printf("Service "%s" not found for protocol "%s"\n",
         argv[1], argv[2]);
      return EXIT_FAILURE;
   }
   /* Print it. */
   printf("Name: %-15s  Port: %5d    Protocol: %-6s\n",
             serv->s_name,ntohs(serv->s_port),serv->s_proto);
   return EXIT_SUCCESS;
}
| RELATED FUNCTIONS | 
endservent
, 
setservent
, 
getservent
, 
getservbyport
![]() Chapter Contents  | 
![]() Previous  | 
![]() Next  | 
![]() Top of Page  | 
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.