---
name: "pvm_recvf"
section: "3"
platform: "linux"
package: "pvm-dev"
version: "3.4.2-8"
release: "Debian 3.0 (Woody)"
platforms: ["linux"]
url: "https://new.carta.tech/pvm_recvf"
---

# pvm\_recvf(3)

Redefines the comparison function used to accept messages.

## 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)**
