+ if (uap->asa && useracc((caddr_t)uap->asa, sizeof (sa), B_WRITE)==0) {
+ u.u_error = EFAULT;
+ return;
+ }
+ fp = getf(uap->fdes);
+ if (fp == 0)
+ return;
+ if ((fp->f_flag & FSOCKET) == 0) {
+ u.u_error = ENOTSOCK;
+ return;
+ }
+ s = splnet();
+ so = fp->f_socket;
+ if ((so->so_options & SO_NBIO) &&
+ (so->so_state & SS_CONNAWAITING) == 0) {
+ u.u_error = EWOULDBLOCK;
+ splx(s);
+ return;
+ }
+ u.u_error = soaccept(so, &sa);
+ if (u.u_error) {
+ splx(s);
+ return;
+ }
+ /* deal with new file descriptor case */
+ /* u.u_r.r_val1 = ... */
+ splx(s);