RECVF(3PVM) RECVF(3PVM)
NAME
pvm_recvf - Redefines the comparison function used to accept messages.
SYNOPSIS
C int (*old)() = pvm_recvf( int (*new)( int bufid, int tid, int tag
))
Fortran NOT AVAILABLE
DISCUSSION
The routine pvm_recvf defines the comparison function to be used by the
pvm_recv, pvm_nrecv, and pvm_probe functions. It is available as a means
to customize PVM message passing. pvm_recvf sets a user supplied com-
parison function to evaluate messages for receiving.
recvf returns the old value of the matching function, or 0 if the old func-
tion was the default matcher
pvm_recvf is intended for sophisticated C programmers who understand the
function of such routines (like signal) and who require a receive routine
that can match on more complex message contexts than the default provides.
MATCHING FUNCTION
The default comparison function evaluates the source and message tag asso-
ciated with all incoming messages.
PARAMETERS
tid Integer task identifier of sending process supplied by the user.
tag Integer message tag supplied by the user.
bufid Integer message buffer identifier.
The matching function should return:
Value Action taken
< 0 return immediately with this error code
0 do not pick this message
1 pick this message and do not scan the rest
> 1 pick this highest ranked message after
scanning them all
Example: Implementing probe with recvf
#include <pvm3.h>
static int foundit = 0;
static int
foo_match(mid, tid, code)
int mid;
int tid;
int code;
{
int t, c, cc;
if ((cc = pvm_bufinfo(mid, (int*)0, &c, &t)) < 0)
return cc;
if ((tid = -1 || tid = t) && (code = -1 || code = c))
foundit = 1;
return 0;
}
int
probe(src, code)
{
int (*omatch)();
int cc;
omatch = pvm_recvf(foo_match);
foundit = 0;
if ((cc = pvm_nrecv(src, code)) < 0)
return cc;
pvm_recvf(omatch);
return foundit;
}
ERRORS
No error conditions are returned by pvm_recvf
SEE ALSO
pvm_recv(3PVM), pvm_nrecv(3PVM), pvm_probe(3PVM), pvm_trecv(3PVM)
Back to the alphabetical listing
Back to the listing of routines
for advanced and group functions