Using Port Monitors

RPC servers can be started by port monitors such as inetd and listen.
Port monitors listen for requests and spawn servers in response. The forked server
process is passed the file descriptor 0 on which the request has been accepted.
For inetd, when the server is done, it can exit immediately or wait
a given interval for another service request.

For listen, servers should exit immediately after replying because listen() always spawns
a new process. The following function call creates a SVCXPRT handle to be
used by the services started by port monitors.

transp = svc_tli_create(0, nconf, (struct t_bind *)NULL, 0, 0)

nconf is the netconfig structure of the transport from which the request is
received.

Because the port monitors have already registered the service with rpcbind, the
service does not need to register with rpcbind. The service must call svc_reg()
to register the service procedure.

svc_reg(transp, PROGNUM, VERSNUM, dispatch,(struct netconfig *)NULL)

The netconfig structure is NULL to prevent svc_reg() from registering the service with
rpcbind.

For connection-oriented transports, the following routine provides a lower level interface:

transp = svc_fd_create(0, recvsize, sendsize);

A 0 file descriptor is the first argument. You can set the value
of recvsize and sendsize to any appropriate buffer size. A 0 for either
argument causes a system default size to be chosen. Application servers that do
not do any listening of their own use svc_fd_create().

Using inetd

Entries in /etc/inet/inetd.conf have different formats for socket-based, TLI-based, and RPC services. The
format of inetd.conf entries for RPC services follows.

Table 5-3 RPC inetd Services

Service

Description

rpc_prog/vers

The name of an RPC
program followed by a / and the version number or a range of
version numbers.

The command is given root permissions, installed in version 4 of the listener
database file, and is made available over TCP transports. Because of the complexity of
the arguments and options to pmadm, use a command script or the menu
system to add RPC services. To use the menu system, type sysadm ports
and choose the -port_services option.

After adding a service, the listener must be re-initialized before the service is
available. To do this, stop and restart the listener, as follows. rpcbind must
be running.