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:
Fa s_name
The official name of the service.
Fa s_aliases
A zero terminated list of alternate names for the service.
Fa s_port
The port number at which the service resides.
Port numbers are returned in network byte order.
Fa 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
Fa 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.
The
getservent (,);
getservbyport (,);
getservbyname (,);
setservent (,);
and
endservent ();
functions appeared in
BSD 4.2
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.