+orecvmsg()
+{
+ register struct a {
+ int s;
+ struct omsghdr *msg;
+ int flags;
+ } *uap = (struct a *)u.u_ap;
+ struct msghdr msg;
+ struct iovec aiov[MSG_MAXIOVLEN];
+
+ u.u_error = copyin((caddr_t)uap->msg, (caddr_t)&msg,
+ sizeof (struct omsghdr));
+ if (u.u_error)
+ return;
+ if ((u_int)msg.msg_iovlen >= sizeof (aiov) / sizeof (aiov[0])) {
+ u.u_error = EMSGSIZE;
+ return;
+ }
+ msg.msg_control = 0;
+ msg.msg_flags = uap->flags;
+ u.u_error = copyin((caddr_t)msg.msg_iov, (caddr_t)aiov,
+ (unsigned)(msg.msg_iovlen * sizeof (aiov[0])));
+ if (u.u_error)
+ return;
+ msg.msg_iov = aiov;
+ if (msg.msg_accrights)
+ if (useracc((caddr_t)msg.msg_accrights,
+ (unsigned)msg.msg_accrightslen, B_WRITE) == 0) {
+ u.u_error = EFAULT;
+ return;
+ }
+
+ recvit(uap->s, &msg, (caddr_t)&uap->msg->msg_namelen,
+ (caddr_t)&uap->msg->msg_accrightslen, /* compat_43 */1);
+}
+#endif
+