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
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.