1 /*- 2 * Copyright (c) 1993 The Regents of the University of California. 3 * All rights reserved. 4 * 5 * This code is derived from software contributed to Berkeley by 6 * Bill Jolitz. 7 * 8 * %sccs.include.redist.c% 9 */ 10 11 #ifndef lint 12 static char sccsid[] = "@(#)snd.c 5.2 (Berkeley) 05/29/93"; 13 #endif /* not lint */ 14 15 #include "main.h" 16 17 /* 18 * Send a message back to a customer, 19 * from data structures and return error status 20 */ 21 int 22 sendrequest(sock, rqst, cp, opts, optlen, fd) 23 int sock, rqst ; 24 struct conversation *cp ; 25 char *opts; 26 int optlen, fd ; 27 { 28 int rv ; 29 struct iovec iov[4]; 30 struct msghdr msg ; 31 32 /* send message to user application containing fd */ 33 msg.msg_name = "" ; 34 msg.msg_namelen = 0 ; /* size of address */ 35 iov[0].iov_base = (caddr_t) &rqst ; 36 iov[0].iov_len = sizeof (rqst) ; 37 iov[1].iov_base = (caddr_t) &cp->co_constatus ; 38 iov[1].iov_len = sizeof(int) ; 39 msg.msg_iov = iov; 40 msg.msg_iovlen = 2; 41 if (opts) { 42 iov[2].iov_base = (caddr_t) opts; 43 iov[2].iov_len = optlen ; 44 msg.msg_iovlen = 3; 45 } 46 if (fd >= 0) { 47 msg.msg_accrights = (caddr_t) &fd ; 48 msg.msg_accrightslen = sizeof(int) ; 49 } else { 50 msg.msg_accrightslen = 0 ; 51 msg.msg_accrights = 0 ; 52 } 53 54 rv = sendmsg(sock, &msg, 0) ; 55 if (rv < 0) { 56 perror("snd:") ; 57 } 58 return (rv) ; 59 } 60