GETPROTOBYNAME(3SOCKET) Sockets Library Functions GETPROTOBYNAME(3SOCKET)
NAME
getprotobyname, getprotobyname_r, getprotobynumber,
getprotobynumber_r, getprotoent, getprotoent_r, setprotoent,
endprotoent - get protocol entry
SYNOPSIS
cc [
flag ... ]
file ...
-lsocket -lnsl [
library ... ]
#include <netdb.h>
struct protoent *getprotobyname(
const char *name);
struct protoent *getprotobyname_r(
const char *name,
struct protoent *result,
char *buffer,
int buflen);
struct protoent *getprotobynumber(
int proto);
struct protoent *getprotobynumber_r(
int proto,
struct protoent *result,
char *buffer,
int buflen);
struct protoent *getprotoent(
void);
struct protoent *getprotoent_r(
struct protoent *result,
char *buffer,
int buflen);
int setprotoent(
int stayopen);
int endprotoent(
void);
DESCRIPTION
These functions return a protocol entry. Two types of interfaces are
supported: reentrant (
getprotobyname_r(),
getprotobynumber_r(), and
getprotoent_r()) and non-reentrant (
getprotobyname(),
getprotobynumber(), and
getprotoent()). The reentrant functions can
be used in single-threaded applications and are safe for
multithreaded applications, making them the preferred interfaces.
The reentrant routines require additional parameters which are used
to return results data.
result is a pointer to a
struct protoent structure and will be where the returned results will be stored.
buffer is used as storage space for elements of the returned results.
buflen is the size of
buffer and should be large enough to contain
all returned data.
buflen must be at least 1024 bytes.
getprotobyname_r(),
getprotobynumber_r(), and
getprotoent_r() each
return a protocol entry.
The entry may come from one of the following sources: the protocols
file (see
protocols(5)), the
NIS maps ``protocols.byname'' and
``protocols.bynumber''. The sources and their lookup order are
specified in the
/etc/nsswitch.conf file (see
nsswitch.conf(5) for
details). Some name services such as NIS will return only one name
for a host, whereas others such as DNS will return all aliases.
The
getprotobyname_r() and
getprotobynumber_r() functions
sequentially search from the beginning of the file until a matching
protocol name or protocol number is found, or until an EOF is
encountered.
getprotobyname() and
getprotobynumber() have the same functionality
as
getprotobyname_r() and
getprotobynumber_r() except that a static
buffer is used to store returned results. These functions are Unsafe
in a multithreaded application.
getprotoent_r() enumerates protocol entries: successive calls to
getprotoent_r() will return either successive protocol entries or
NULL. Enumeration might not be supported by some sources. If multiple
threads call
getprotoent_r(), each will retrieve a subset of the
protocol database.
getprotent() has the same functionality as
getprotent_r() except that
a static buffer is used to store returned results. This routine is
unsafe in a multithreaded application.
setprotoent() "rewinds" to the beginning of the enumeration of
protocol entries. If the
stayopen flag is non-zero, resources such as
open file descriptors are not deallocated after each call to
getprotobynumber_r() and
getprotobyname_r(). Calls to
getprotobyname_r() , The
getprotobyname(),
getprotobynumber_r(), and
getprotobynumber() functions might leave the enumeration in an
indeterminate state, so
setprotoent() should be called before the
first call to
getprotoent_r() or
getprotoent(). The
setprotoent() function has process-wide scope, and ``rewinds'' the protocol entries
for all threads calling
getprotoent_r() as well as main-thread calls
to
getprotoent().
The
endprotoent() function can be called to indicate that protocol
processing is complete; the system may then close any open protocols
file, deallocate storage, and so forth. It is legitimate, but
possibly less efficient, to call more protocol functions after
endprotoent().
The internal representation of a protocol entry is a
protoent structure defined in <
netdb.h> with the following members:
char *p_name;
char **p_aliases;
int p_proto;
RETURN VALUES
The
getprotobyname_r(),
getprotobyname(),
getprotobynumber_r(), and
getprotobynumber() functions return a pointer to a
struct protoent if
they successfully locate the requested entry; otherwise they return
NULL. The
getprotoent_r() and
getprotoent() functions return a pointer to a
struct protoent if they successfully enumerate an entry; otherwise
they return
NULL, indicating the end of the enumeration.
ERRORS
The
getprotobyname_r(),
getprotobynumber_r(), and
getprotoent_r() functions will fail if:
ERANGE The length of the buffer supplied by the caller is not
large enough to store the result.
FILES
/etc/protocols /etc/nsswitch.confATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+---------------+------------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+------------------+
|MT-Level | See
NOTES below. |
+---------------+------------------+
SEE ALSO
Intro(3),
netdb.h(3HEAD),
nsswitch.conf(5),
protocols(5),
attributes(7)NOTES
Although
getprotobyname_r(),
getprotobynumber_r(), and
getprotoent_r() are not mentioned by POSIX 1003.1:2001, they were
added to complete the functionality provided by similar thread-safe
functions.
When compiling multithreaded applications, see
Intro(3),
Notes On Multithread Applications, for information about the use of the
_REENTRANT flag.
The
getprotobyname_r(),
getprotobynumber_r(), and
getprotoent_r() functions are reentrant and multithread safe. The reentrant
interfaces can be used in single-threaded as well as multithreaded
applications and are therefore the preferred interfaces.
The
getprotobyname(),
getprotobyaddr(), and
getprotoent() functions
use static storage, so returned data must be copied if it is to be
saved. Because of their use of static storage for returned data,
these functions are not safe for multithreaded applications.
The
setprotoent() and
endprotoent() functions have process-wide
scope, and are therefore not safe in multi-threaded applications.
Use of
getprotoent_r() and
getprotoent() is discouraged; enumeration
is well-defined for the protocols file and is supported (albeit
inefficiently) for
NIS but in general may not be well-defined. The
semantics of enumeration are discussed in
nsswitch.conf(5).
BUGS
Only the Internet protocols are currently understood.
February 25, 2017 GETPROTOBYNAME(3SOCKET)