Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
TRECV(3PVM)			PVM Version 3.4			   TRECV(3PVM)

NAME
       pvm_trecv - Receive with	timeout.

SYNOPSIS
       C    #include <sys/time.h>
	    int	bufid =	pvm_trecv( int tid, int	msgtag,	struct timeval *tmout )

       Fortran	 call pvmftrecv( tid, msgtag, sec, usec, bufid )

PARAMETERS
       tid     Integer to match	task identifier	of sending process.

       msgtag  Integer to match	message	tag; should be >= 0.

       tmout   (or  sec	and usec) Time to wait before returning	without	a mes-
	       sage.

       bufid   Integer returns the value of  the  new  active  receive	buffer
	       identifier.  Values less	than zero indicate an error.

DESCRIPTION
       The routine pvm_trecv blocks the	process	until a	message	with label ms-
       gtag  has arrived from tid.  pvm_trecv then places the message in a new
       active receive buffer, also clearing the	current	receive	buffer.	 If no
       matching	message	arrives	within the specified waiting  time,  pvm_trecv
       returns without a message.

       A  -1 in	msgtag or tid matches anything.	 This allows the user the fol-
       lowing options.	If tid = -1 then pvm_trecv will	accept a message  from
       any process which has a matching	msgtag.	 If msgtag = -1	then pvm_trecv
       will accept any message that is sent from process tid.  If tid and msg-
       tag  are	 both  -1,  then  pvm_trecv  will  accept any message from any
       process.

       In C, the tmout fields tv_sec and tv_usec specify  how  long  pvm_trecv
       will  wait without returning a matching message.	 In Fortran, two sepa-
       rate parameters,	sec and	usec are  passed.   With  both	set  to	 zero,
       pvm_trecv behaves the same as pvm_nrecv,	which is to probe for messages
       and  return immediately even if none are	matched.  In C,	passing	a null
       pointer in tmout	makes pvm_trecv	act like pvm_recv, that	 is,  it  will
       wait indefinitely.  In Fortran, setting sec to -1 has the same effect.

       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,  mes-
       sage  A will arrive at task 2 before message B.	Moreover, if both mes-
       sages arrive before task	2 does a receive, then a wildcard receive will
       always return message A.

       If pvm_trecv is successful, bufid will be the new active	receive	buffer
       identifier.  If no message is received, pvm_trecv returns 0.   If  some
       error occurs then bufid will be < 0.

       Once  pvm_trecv	returns,  the data in the message can be unpacked into
       the user's memory using the unpack routines.

EXAMPLES
       C:
	    struct timeval tmout;

	    tid	= pvm_parent();
	    msgtag = 4 ;
	    tmout.tv_sec = 60;
	    tmout.tv_usec = 0;
	    if ((bufid = pvm_trecv( tid, msgtag, &tmout	)) > 0)	{
		 pvm_upkint( tid_array,	10, 1 );
		 pvm_upkint( problem_size, 1, 1	);
		 pvm_upkfloat( input_array, 100, 1 );
	    }

       Fortran:
	    CALL PVMFTRECV( -1,	4, 60, 0, BUFID	)
	    IF (BUFID .EQ. 0) GO TO 666
	    CALL PVMFUNPACK( INTEGER4, TIDS, 25, 1, INFO )
	    CALL PVMFUNPACK( REAL8, MATRIX, 100, 100, INFO )
       666  CONTINUE

ERRORS
       These error conditions can be returned by pvm_trecv

       PvmBadParam
	      giving an	invalid	tid value, or msgtag < -1.

       PvmSysErr
	      pvmd not responding.

SEE ALSO
       pvm_bufinfo(3PVM), pvm_getminfo(3PVM), pvm_nrecv(3PVM), pvm_recv(3PVM),
       pvm_unpack(3PVM), pvm_probe(3PVM), pvm_send(3PVM), pvm_mcast(3PVM)

			       8 February, 1994			   TRECV(3PVM)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=pvm_trecv&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help