[comp.parallel] Help with nrecv

ralph@cs.ubc.ca (Scott Ralph) (11/08/90)

I am having trouble using nrecv() when the data field
becomes larger than 4096 bytes -- the maximum number of
bytes for a single message.

	extern int errno;
	struct nmsg header;

	HostMessage host_message;  

	typedef Message *MessagePtr;  

	typedef struct hMsg {          
	   unsigned char sending_processor;             
	   unsigned char rows;
	   unsigned char cols;
	   unsigned char type;
	   unsigned char generation;
	   char    data [NUMBER_PIXELS_IN_REGION];
	} HostMessage;

	typedef HostMessage *HostMessagePtr;   

    header.nh_event = 0;
    header.nh_type = 0;
    header.nh_length = sizeof (HostMessage);
    header.nh_flags = 0;
    header.nh_msg = (char *) &host_message;

    if ( nrecv (&header)) { 
	printf("Death # 1 -- %d\n", errno); 
	fflush(stdout); 
	kexit (errno);*
    }
    

The nrecv() returns with errno #4 -- EINTR
This corresponds to an interrupted system call.


NSEND(l)            TROLLIUS NETWORK LIBRARY             NSEND(l)

     The nh_length field holds the length (in bytes) of the  mes-
     sage  to  be  sent.   If the sender and the receiver specify
     different lengths, the lesser amount  will  be  transferred.
     The  datalink  functions called by nsend have a maximum mes-
     sage length of MAXNMSGLEN (defined in  <trillium/net.h>  and
     currently  set  to  4096  bytes).   Messages  exceeding this
     length will be implicitly  broken  down  into  a  series  of
     smaller  messages, which will be recombined at the receiving
     end. 

-------------


I am not sure if additional information must be specified (i.e.
the nh_flags field?) or not.

Any Suggestions?

-- scott ralph