/* kern_descrip.c 5.1 82/07/15 */
#include "../h/socketvar.h"
register struct file
*fp
;
uap
= (struct a
*)u
.u_ap
;
} *ap
= (struct uap
*)u
.u_ap
;
int nfds
= 0, readable
= 0, writeable
= 0;
if (ap
->rp
&& copyin((caddr_t
)ap
->rp
,(caddr_t
)&rd
,sizeof(fd_set
)))
if (ap
->wp
&& copyin((caddr_t
)ap
->wp
,(caddr_t
)&wr
,sizeof(fd_set
)))
u
.u_procp
->p_flag
|= SSEL
;
readable
= selscan(ap
->nfd
, rd
, &nfds
, FREAD
);
writeable
= selscan(ap
->nfd
, wr
, &nfds
, FWRITE
);
if (readable
|| writeable
)
rem
= (ap
->timo
+999)/1000 - (time
- t
);
if (ap
->timo
== 0 || rem
<= 0)
if ((u
.u_procp
->p_flag
& SSEL
) == 0 || nselcoll
!= ncoll
) {
u
.u_procp
->p_flag
&= ~SSEL
;
u
.u_procp
->p_flag
&= ~SSEL
;
tsel
= tsleep((caddr_t
)&selwait
, PZERO
+1, rem
);
rd
.fds_bits
[0] = readable
;
wr
.fds_bits
[0] = writeable
;
s
= (ap
->nfd
+ NBBY
- 1) / NBBY
;
(void) copyout((caddr_t
)&rd
, (caddr_t
)ap
->rp
, sizeof(fd_set
));
(void) copyout((caddr_t
)&wr
, (caddr_t
)ap
->wp
, sizeof(fd_set
));
selscan(nfd
, fds
, nfdp
, flag
)
if (fp
->f_flag
& FSOCKET
)
able
= soselect(fp
->f_socket
, flag
);
switch (ip
->i_mode
& IFMT
) {
(*cdevsw
[major(ip
->i_rdev
)].d_select
)
wakeup((caddr_t
)&selwait
);
if (p
->p_wchan
== (caddr_t
)&selwait
)
register struct file
*fp
;
uap
= (struct a
*)u
.u_ap
;
if (u
.u_vrpages
[uap
->fdes
]) {
u
.u_ofile
[uap
->fdes
] = NULL
;