GETSERVENT(3) | Library Functions Manual | GETSERVENT(3)

# NAME

`getservent`, `getservent_r`, `getservbyport`, `getservbyport_r`, `getservbyname`, `getservbyname_r`, `setservent`, `setservent_r`, `endservent`, `endservent_r` — get service entry

# SYNOPSIS

`#include <netdb.h>`

struct servent *
`getservent`(void);

int
`getservent_r`(struct servent *servent, struct servent_data *servent_data);

struct servent *
`getservbyname`(const char *name, const char *proto);

int
`getservbyname_r`(const char *name, const char *proto, struct servent *servent, struct servent_data *servent_data);

struct servent *
`getservbyport`(int port, const char *proto);

int
`getservbyport_r`(int port, const char *proto, struct servent *servent, struct servent_data *servent_data);

void
`setservent`(int stayopen);

void
`setservent_r`(int stayopen, struct servent_data *servent_data);

void
`endservent`(void);

void
`endservent_r`(struct servent_data *servent_data);

# DESCRIPTION

The `getservent`(), `getservbyname`(), and `getservbyport`() functions each return a pointer to an object with the following structure containing the broken-out fields of a line in the network services database, /etc/services.

    struct	servent {
    	char	*s_name;	/* official name of service */
    	char	**s_aliases;	/* alias list */
    	int	s_port;		/* port service resides at */
    	char	*s_proto;	/* protocol to use */
    };

The members of this structure are:

s_name
  The official name of the service.
s_aliases
  A null-terminated list of alternate names for the service.
s_port
  The port number at which the service resides. Port numbers are returned in network byte order.
s_proto
  The name of the protocol to use when contacting the service.

The `getservent`() function reads the next line of the file, opening the file if necessary.

The `setservent`() function opens and rewinds the file. If the stayopen flag is non-zero, the services database will not be closed after each call to `getservbyname`() or `getservbyport`().

The `endservent`() function closes the file.

The `getservbyname`() and `getservbyport`() functions sequentially search from the beginning of the file until a matching protocol name or port number (specified in network byte order) is found, or until `EOF` is encountered. If a protocol name is also supplied (non-null), searches must also match the protocol.

The `getservent_r`(), `getservbyport_r`(), `getservbyname_r`(), `setservent_r`(), and `endservent_r`() functions are reentrant versions of the above functions that take a pointer to a servent_data structure which is used to store state information. The structure must be zero-filled before it is used and should be considered opaque for the sake of portability.

The `getservent_r`(), `getservbyport_r`(), and `getservbyname_r`() functions also take a pointer to a servent structure which is used to store the results of the database lookup.

# RETURN VALUES

The `getservent`(), `getservbyport`(), and `getservbyname`() functions return a pointer to a servent structure on success or a null pointer if end-of-file is reached or an error occurs.

The `getservent_r`(), `getservbyport_r`(), and `getservbyname_r`() functions return 0 on success or -1 if end-of-file is reached or an error occurs.

# FILES

/etc/services

# SEE ALSO

getprotoent(3), services(5)

# STANDARDS

The `getservent`(), `getservbynumber`(), `getservbyname`(), `setservent`(), and `endservent`() functions conform to IEEE Std 1003.1-2004 (“POSIX.1”).

The `getservent_r`(), `getservbyport_r`(), `getservbyname_r`(), `setservent_r`(), and `endservent_r`() functions are not currently standardized. This implementation follows the API used by HP, IBM, and Digital.

# HISTORY

The `getservent`(), `getservbyport`(), `getservbyname`(), `setservent`(), and `endservent`() functions appeared in 4.2BSD.

The `getservent_r`(), `getservbyport_r`(), `getservbyname_r`(), `setservent_r`(), and `endservent_r`() functions appeared in OpenBSD 3.7.

# BUGS

The non-reentrant functions use static data storage; if the data is needed for future use, it should be copied before any subsequent calls overwrite it. Expecting port numbers to fit in a 32-bit quantity is probably naive.

June 5, 2013 | Debian