bionic (3) pvm_recvf.3PVM.gz

Provided by: pvm-dev_3.4.6-1build2_amd64 bug

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

DESCRIPTION

       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 comparison function to evaluate messages for receiving.

       recvf returns the old value of the matching function, or 0 if the old function 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 associated 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.

EXAMPLES

       Implementing message probe with recvf, using our matching function to  return  information  in  a  global
       variable.

       #include <pvm3.h>

       static int foundit = 0;

       static int
       foo_match(mid, tid, tag)
            int mid;
            int tid;
            int tag;
       {
            int t, c;
            struct pvmminfo header;

            pvm_getminfo(mid, &header);

            if ((tid == -1 || tid == header.src) && (tag == -1 || tag == header.tag))
                 foundit = 1;

            return 0;
       }

       int
       probe(src, tag)
       {
            int (*omatch)();
            int cc;

            omatch = pvm_recvf(foo_match);

            foundit = 0;

            if ((cc = pvm_nrecv(src, tag)) < 0)
                 return cc;

            pvm_recvf(omatch);

            return foundit;
       }

ERRORS

       No error conditions are returned by pvm_recvf

SEE ALSO

       pvm_bufinfo(3PVM), pvm_getminfo(3PVM), pvm_recv(3PVM), pvm_nrecv(3PVM), pvm_probe(3PVM), pvm_trecv(3PVM)

                                                 30 August, 1993                                     RECVF(3PVM)