GETPROTOENT(3) | Library Functions Manual | GETPROTOENT(3)

# NAME

`getprotoent`, `getprotoent_r`, `getprotobynumber`, `getprotobynumber_r`, `getprotobyname`, `getprotobyname_r`, `setprotoent`, `setprotoent_r`, `endprotoent`, `endprotoent_r` — get protocol entry

# SYNOPSIS

`#include <netdb.h>`

struct protoent *
`getprotoent`(void);

int
`getprotoent_r`(struct protoent *protoent, struct protoent_data *protoent_data);

struct protoent *
`getprotobyname`(const char *name);

int
`getprotobyname_r`(const char *name, struct protoent *protoent, struct protoent_data *protoent_data);

struct protoent *
`getprotobynumber`(int proto);

int
`getprotobynumber_r`(int proto, struct protoent *protoent, struct protoent_data *protoent_data);

void
`setprotoent`(int stayopen);

void
`setprotoent_r`(int stayopen, struct protoent_data *protoent_data);

void
`endprotoent`(void);

void
`endprotoent_r`(struct protoent_data *protoent_data);

# DESCRIPTION

The `getprotoent`(), `getprotobyname`(), and `getprotobynumber`() functions each return a pointer to an object with the following structure containing the broken-out fields of a line in the network protocol database, /etc/protocols.

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

The members of this structure are:

p_name
  The official name of the protocol.
p_aliases
  A null-terminated list of alternate names for the protocol.
p_proto
  The protocol number.

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

The `setprotoent`() function opens and rewinds the file. If the stayopen flag is non-zero, the protocol database will not be closed after each call to `getprotobyname`() or `getprotobynumber`().

The `endprotoent`() function closes the file.

The `getprotobyname`() and `getprotobynumber`() functions sequentially search from the beginning of the file until a matching protocol name or protocol number is found, or until `EOF` is encountered.

The `getprotoent_r`(), `getprotobyport_r`(), `getprotobyname_r`(), `setprotoent_r`(), and `endprotoent_r`() functions are reentrant versions of the above functions that take a pointer to a protoent_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 `getprotoent_r`(), `getprotobyport_r`(), and `getprotobyname_r`() functions also take a pointer to a protoent structure which is used to store the results of the database lookup.

# RETURN VALUES

The `getprotoent`(), `getprotobyport`(), and `getprotobyname`() functions return a pointer to a protoent structure on success or a null pointer if end-of-file is reached or an error occurs.

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

# FILES

/etc/protocols

# SEE ALSO

protocols(5)

# STANDARDS

The `getprotoent`(), `getprotobynumber`(), `getprotobyname`(), `setprotoent`(), and `endprotoent`() functions conform to IEEE Std 1003.1-2004 (“POSIX.1”).

The `getprotoent_r`(), `getprotobyport_r`(), `getprotobyname_r`(), `setprotoent_r`(), and `endprotoent_r`() functions are not currently standardized. This implementation follows the API used by HP, IBM, and Digital.

# HISTORY

The `getprotoent`(), `getprotobynumber`(), `getprotobyname`(), `setprotoent`(), and `endprotoent`() functions appeared in 4.2BSD.

The `getprotoent_r`(), `getprotobyport_r`(), `getprotobyname_r`(), `setprotoent_r`(), and `endprotoent_r`() functions appeared in OpenBSD 3.7.

# BUGS

The non-reentrant functions use a static data space; if the data is needed for future use, it should be copied before any subsequent calls overwrite it. Only the Internet protocols are currently understood.

June 5, 2013 | Debian