---
name: "setprotoent"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/getprotoent"
---

# setprotoent(3)

get protocol entry

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

## NAME

getprotoent, getprotobyname, getprotobynumber, setprotoent, endprotoent - get protocol entry

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <netdb.h>
```

**struct protoent \*getprotoent(void);**

**struct protoent \*getprotobyname(const char \****name***);** **struct protoent \*getprotobynumber(int** *proto***);**

**void setprotoent(int** *stayopen***);** **void endprotoent(void);**

## DESCRIPTION

The **getprotoent**() function reads the next entry from the protocols database (see [**protocols**(5)](/protocols/5.md)) and returns a *protoent* structure containing the broken-out fields from the entry. A connection is opened to the database if necessary.

The **getprotobyname**() function returns a *protoent* structure for the entry from the database that matches the protocol name *name*. A connection is opened to the database if necessary.

The **getprotobynumber**() function returns a *protoent* structure for the entry from the database that matches the protocol number *number*. A connection is opened to the database if necessary.

The **setprotoent**() 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 **getproto\***() functions.

The **endprotoent**() function closes the connection to the database.

The *protoent* structure is defined in *\<netdb.h\>* as follows:

```
struct protoent {
    char  *p_name;       /* official protocol name */
    char **p_aliases;    /* alias list */
    int    p_proto;      /* protocol number */
}
```

The members of the *protoent* structure are:

- *p\_name*

  The official name of the protocol.

- *p\_aliases*

  A NULL-terminated list of alternative names for the protocol.

- *p\_proto*

  The protocol number.

## RETURN VALUE

The **getprotoent**(), **getprotobyname**(), and **getprotobynumber**() functions return a pointer to a statically allocated *protoent* structure, or a null pointer if an error occurs or the end of the file is reached.

## FILES

- */etc/protocols*

  protocol database file

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **getprotoent**() | Thread safety | MT-Unsafe race:protoent race:protoentbuf locale |
| **getprotobyname**() | Thread safety | MT-Unsafe race:protobyname locale |
| **getprotobynumber**() | Thread safety | MT-Unsafe race:protobynumber locale |
| **setprotoent**(), **endprotoent**() | Thread safety | MT-Unsafe race:protoent locale |

In the above table, *protoent* in *race:protoent* signifies that if any of the functions **setprotoent**(), **getprotoent**(), or **endprotoent**() are used in parallel in different threads of a program, then data races could occur.

## STANDARDS

POSIX.1-2008.

## HISTORY

POSIX.1-2001, 4.3BSD.

## SEE ALSO

[**getnetent**(3)](/getnetent/3.md), [**getprotoent\_r**(3)](/getprotoent_r/3.md), [**getservent**(3)](/getservent/3.md), [**protocols**(5)](/protocols/5.md)
