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