+ uap->asa && copyin((caddr_t)uap->asa, (caddr_t)&sa, sizeof (sa))) {
+ u.u_error = EFAULT;
+ return;
+ }
+ u.u_error = soreceive(fp->f_socket, uap->asa ? &sa : 0);
+ if (u.u_error)
+ return;
+ if (uap->asa)
+ (void) copyout((caddr_t)&sa, (caddr_t)uap->asa, sizeof (sa));
+}
+
+/*
+ * Get socket address.
+ */
+ssocketaddr()
+{
+ register struct a {
+ int fdes;
+ struct sockaddr *asa;
+ } *uap = (struct a *)u.u_ap;
+ register struct file *fp;
+COUNT(SSOCKETADDR);
+
+ fp = getf(uap->fdes);
+ if (fp == 0)
+ return;
+ if ((fp->f_flag & FSOCKET) == 0) {
+ u.u_error = ENOTSOCK;
+ return;
+ }
+ if (copyout((caddr_t)&fp->f_socket->so_addr, (caddr_t)uap->asa,
+ sizeof (struct sockaddr))) {