2 int sendmsg( int sock, struct msghdr *hdr, int flags );
3 int recvmsg( int sock, struct msghdr *hdr, int flags );
11 #define msghdr dumb_name_for_wrong_msghdr_9873
18 #ifdef SCO /* wrong structute msghdr + sendmsg not implemented !!!? */
26 * Message header for recvmsg and sendmsg calls.
29 caddr_t msg_name; /* optional address */
30 int msg_namelen; /* size of address */
31 struct iovec *msg_iov; /* scatter/gather array */
32 int msg_iovlen; /* # elements in msg_iov */
33 caddr_t msg_accrights; /* access rights sent/received */
40 /* SCO did not implement these functions ! */
42 static char buffer[8192]; /* maybe there won't be bigger message */
45 int sendmsg( sock, hdr, flags ) int sock; struct msghdr *hdr; int flags; {
50 i < hdr -> msg_iovlen ;
51 size+=hdr->msg_iov[i].iov_len, ptr+=hdr->msg_iov[i].iov_len, i++
53 if( size + hdr->msg_iov[i].iov_len >= sizeof(buffer) ){
57 bcopy( hdr->msg_iov[i].iov_base, ptr, hdr->msg_iov[i].iov_len );
60 if( hdr->msg_name != NULL )
61 return sendto( sock,buffer,size,flags, hdr->msg_name,hdr->msg_namelen );
63 return send( sock,buffer,size,flags );
67 int recvmsg( sock, hdr, flags ) int sock; struct msghdr *hdr; int flags; {
71 if( hdr->msg_name != NULL )
72 size = recvfrom( sock,buffer,size,flags, hdr->msg_name,hdr->msg_namelen );
74 size = recv( sock,buffer,size,flags );
76 if( size<=0 ) return size;
79 i < hdr -> msg_iovlen ;
80 sizegot+=hdr->msg_iov[i].iov_len, ptr+=hdr->msg_iov[i].iov_len, i++
82 if( sizegot + hdr->msg_iov[i].iov_len >= sizeof(buffer) ){
83 bcopy( ptr, hdr->msg_iov[i].iov_base, sizeof(buffer)-sizegot);
84 size = sizeof(buffer);
87 bcopy( ptr, hdr->msg_iov[i].iov_base, hdr->msg_iov[i].iov_len );