---
name: "getservbyname"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/endservent"
---

# getservbyname(3)

get service entry

Part of [endservent(3)](/endservent/3.md).

## NAME

**getservent**, **getservbyport**, **getservbyname**, **setservent**, **endservent** – get service entry

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<netdb.h\>**

*struct* *servent* *\**\

**getservent**();

*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**(), **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 data base, */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 zero 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 net data base 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 (which must be 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.

## FILES

- */etc/services*

  - */var/db/services.db*

  ## DIAGNOSTICS

Null pointer returned on EOF or error.

## SEE ALSO

[getprotoent(3)](/getprotoent/3.md), [services(5)](/services/5.md), [services\_mkdb(8)](/services_mkdb/8.md)

## HISTORY

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

## BUGS

These functions use a thread-specific 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.
