Fortran call pvmfnrecv( tid, msgtag, bufid )
If the requested message has not arrived, then pvm_nrecv immediately returns with a 0 in bufid. If some error occurs bufid will be < 0.
A -1 in msgtag or tid matches anything. This allows the user the following options. If tid = -1 and msgtag is defined by the user, then pvm_nrecv will accept a message from any process which has a matching msgtag. If msgtag = -1 and tid is defined by the user, then pvm_nrecv will accept any message that is sent from process tid. If tid = -1 and msgtag = -1, then pvm_nrecv will accept any message from any process.
The PVM model guarantees the following about message order. If task 1 sends message A to task 2, then task 1 sends message B to task 2, message A will arrive at task 2 before message B. Moreover, if both messages arrive before task 2 does a receive, then a wildcard receive will always return message A.
pvm_nrecv is non-blocking in the sense that the routine always returns immediately either with the message or with the information that the message has not arrived at the local pvmd yet. pvm_nrecv can be called multiple times to check if a given message has arrived yet. In addition the blocking receive pvm_recv can be called for the same message if the application runs out of work it could do before the data arrives.
If pvm_nrecv returns with the message, then the data in the message can be unpacked into the user's memory using the unpack routines.
PvmBadParam giving an invalid tid value or msgtag.
PvmSysErr pvmd not responding.