# getservent

## NAME



           getservent, getservbyname, getservbyport, setservent, endservent -
           get service entry
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <netdb.h>**
    
           **struct servent *getservent(void);**
    
           **struct servent *getservbyname(const char ***_name_**, const char ***_proto_**);**
           **struct servent *getservbyport(int** _port_**, const char ***_proto_**);**
    
           **void setservent(int** _stayopen_**);**
           **void endservent(void);**
    


## DESCRIPTION



           The **getservent**() function reads the next entry from the services
           database (see services(5)) and returns a _servent_ structure
           containing the broken-out fields from the entry.  A connection is
           opened to the database if necessary.
    
           The **getservbyname**() function returns a _servent_ structure for the
           entry from the database that matches the service _name_ using
           protocol _proto_.  If _proto_ is NULL, any protocol will be matched.
           A connection is opened to the database if necessary.
    
           The **getservbyport**() function returns a _servent_ structure for the
           entry from the database that matches the port _port_ (given in
           network byte order) using protocol _proto_.  If _proto_ is NULL, any
           protocol will be matched.  A connection is opened to the database
           if necessary.
    
           The **setservent**() function opens a connection to the database, and
           sets the next entry to the first entry.  If _stayopen_ is nonzero,
           then the connection to the database will not be closed between
           calls to one of the **getserv***() functions.
    
           The **endservent**() function closes the connection to the database.
    
           The _servent_ structure is defined in _< netdb.h>_ as follows:
    
               struct servent {
                   char  *s_name;       /* official service name */
                   char **s_aliases;    /* alias list */
                   int    s_port;       /* port number */
                   char  *s_proto;      /* protocol to use */
               }
    
           The members of the _servent_ structure are:
    
           _s_name_ The official name of the service.
    
           _s_aliases_
                  A NULL-terminated list of alternative names for the
                  service.
    
           _s_port_ The port number for the service given in network byte
                  order.
    
           _s_proto_
                  The name of the protocol to use with this service.
    


## RETURN VALUE



           The **getservent**(), **getservbyname**(), and **getservbyport**() functions
           return a pointer to a statically allocated _servent_ structure, or
           NULL if an error occurs or the end of the file is reached.
    


## FILES



           _/etc/services_
                  services database file
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌─────────────────┬───────────────┬──────────────────────────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├─────────────────┼───────────────┼──────────────────────────────┤
           │ **getservent**()    │ Thread safety │ MT-Unsafe race:servent       │
           │                 │               │ race:serventbuf locale       │
           ├─────────────────┼───────────────┼──────────────────────────────┤
           │ **getservbyname**() │ Thread safety │ MT-Unsafe race:servbyname    │
           │                 │               │ locale                       │
           ├─────────────────┼───────────────┼──────────────────────────────┤
           │ **getservbyport**() │ Thread safety │ MT-Unsafe race:servbyport    │
           │                 │               │ locale                       │
           ├─────────────────┼───────────────┼──────────────────────────────┤
           │ **setservent**(),   │ Thread safety │ MT-Unsafe race:servent       │
           │ **endservent**()    │               │ locale                       │
           └─────────────────┴───────────────┴──────────────────────────────┘
    
           In the above table, _servent_ in _race:servent_ signifies that if any
           of the functions **setservent**(), **getservent**(), or **endservent**() are
           used in parallel in different threads of a program, then data
           races could occur.
    


## STANDARDS



           POSIX.1-2008.
    


* * *