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

FreeBSD Manual Pages

  
 
  

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

NAME
     pvm_addmhf, pvm_delmhf - Install or remove message-handler functions.

SYNOPSIS
     C	  int mhid = pvm_addmhf( int src, int tag, int ctx, int (*func)(int mid) )
	  int info = pvm_delmhf( int mhid )

     Fortran   Not available

PARAMETERS
     src    The tid of the sender.

     tag    The tag sent with the message.

     ctx    The context sent with the message.

     func   Function to call when message received.

     mhid   Message handler id.

     info   Result code.

     mid    Message buffer identifier for new active receive buffer.

DESCRIPTION
     pvm_addmhf  specifies a function that will be called whenever libpvm copies
     in a message whose header fields of src, tag, and ctx match those	provided
     to pvm_addmhf().

     The src and tag fields may be left unspecified (wildcard) by setting to -1.

     The calling sequence of the message handler function is:

	  int handler( int mid )

     Where  mid  is the bufid of the received message.	The handler function can
     be used to unpack and process the received message buffer.   PVM  automati-
     cally  saves  the current send and receive buffers, so the handler need not
     worry about interfering with message buffers in the regular  program  flow.
     PVM  also	sets  the  current receive buffer to the received message (using
     pvm_setrbuf()) before invoking the message handler, so the message  can  be
     unpacked directly.  PVM will free this message buffer when the message han-
     dler  returns, if the handler has not already done so.  But, any other mes-
     sage buffers created by the handler routine should be freed using pvm_free-
     buf() before returning.

     Note: Operation in the message handler context is somewhat restricted.  The
     function may call some PVM functions, but not others.  For example, it  may
     compose and send a reply message as shown:

	  pvm_packf( "%+ %s", PvmDataDefault, "got your message" );
	  pvm_send( tid, tag );
	  pvm_freebuf( pvm_setsbuf( 0 ) );

     or equivalently:

	  pvm_setsbuf( pvm_mkbuf( PvmDataDefault ) );
	  pvm_pkstr( "got your message" );
	  pvm_send( tid, tag );
	  pvm_freebuf( pvm_setsbuf( 0 ) );

     but  is not allowed to call certain other PVM communication functions, such
     as multicast or receive.

     pvm_addmhf returns the id number of the newly created  message  handler  if
     successful;  this	number	may be passed to pvm_delmhf to remove the entry.
     There is no guarantee to the ordering of id values returned by  pvm_addmhf,
     or  to  the  order in which message handlers will be invoked.  PvmExists is
     returned if the handler already exists.

     pvm_delmhf returns PvmOk  if  successful.	 PvmBadParam  if  pvm_delmhf  is
     passed a negative id value.  PvmNotFound if the id value is not found.

EXAMPLES
	  /* Print a message when hosts are added to virtual machine */

	  int
	  hostAdded( int mid )
	  {
	       int n;
	       pvm_unpackf( "%d", &n );
	       printf( "*** %d new hosts just added ***\n", n );
	  }

	  void
	  main()
	  {
	       int src, tag, ctx;

	       . . .

	       src = -1;
	       tag = 99;
	       ctx = -1;

	       pvm_addmhf( src, tag, ctx, hostAdded );
	       pvm_notify( PvmHostAdd, 99, -1, (int *) NULL );

	       . . .
	  }

ERRORS
     The following error conditions can be returned by pvm_addmhf():

     PvmExists
	    Can't insert as handler already exists with same (tag, ctx, src) in-
	    cluding "wild-cards" (those set to -1)

     The following error conditions can be returned by pvm_delmhf():

     PvmBadParam
	    Invalid (negative) mhid passed in.

     PvmNotFound
	    Message handler mhid does not exist.

SEE ALSO
     pvm_setrbuf(3PVM), pvm_setsbuf(3PVM), pvm_freebuf(3PVM)

				  1 April, 1997 		    ADDMHF(3PVM)

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

home | help