GETFDS(3PVM) GETFDS(3PVM)
NAME
pvm_getfds - Get file descriptors in use by PVM.
SYNOPSIS
C int nfds = pvm_getfds( int **fds )
Fortran Not Available
PARAMETERS
fds Returns integer array of file descriptors.
DISCUSSION
A PVM task uses sockets to communicate between libpvm and other tasks or
the pvmd. It is sometimes useful to know the file descriptor numbers of
the sockets in order to wait from input from either PVM messages or an
external source. For example, the PVM console waits on both keyboard input
and notify messages. Input can be multiplexed by polling all sources, but
this wastes cpu cycles. Instead, the select() system call can be used to
wait until one or more sources of input are ready.
If it completes successfully, pvm_getfds returns the number of sockets in
use, and the file descriptor numbers in an array (allocated and freed by
libpvm). At least one socket always exists (from task to pvmd), and its
descriptor is always fds[0]. The number of sockets varies as direct routes
are established to other tasks.
It can be difficult to track the set of file descriptors if direct routing
is enabled, because routes are created as messages are either sent or
received. The simplest approach is to disable direct routing.
When select returns with a PVM file descriptor ready, a complete message
may be ready to be received, or instead only a fragment may be waiting.
pvm_nrecv or pvm_probe should be used test without blocking.
EXAMPLES
The following program fragment waits until either keyboard input is avail-
able, or a PVM message has arrived.
int *d;
fd_set r;
pvm_setopt(PvmRoute, PvmDontRoute);
pvm_getfds(&d);
FD_ZERO(&r);
FD_SET(0, &r);
FD_SET(d[0], &r);
while (1) {
if (select(d[0] + 1, &r, (fd_set*)0, (fd_set*)0,
(struct timeval*)0) > 0) {
if (FD_ISSET(0, &r))
... /* read keyboard input */
if (FD_ISSET(d[0], &r) && pvm_nrecv(-1, -1) > 0)
... /* got a PVM message */
}
}
ERRORS
The following error condition can be returned by pvm_getfds:
PvmSysErr pvmd not responding.
RESTRICTIONS
pvm_getfds is only availble when running PVM on a Unix or similar system.
SEE ALSO
pvm_notify(3PVM), pvm_trecv(3PVM)
Back to the alphabetical listing
Back to the listing of routines
for advanced and group functions