* Copyright (c) 1982, 1986, 1990 Regents of the University of California.
* %sccs.include.redist.c%
* @(#)sys_socket.c 7.11 (Berkeley) %G%
struct fileops socketops
=
{ soo_read
, soo_write
, soo_ioctl
, soo_select
, soo_close
};
return (soreceive((struct socket
*)fp
->f_data
, (struct mbuf
**)0,
uio
, (struct mbuf
**)0, (struct mbuf
**)0, (int *)0));
return (sosend((struct socket
*)fp
->f_data
, (struct mbuf
*)0,
uio
, (struct mbuf
*)0, (struct mbuf
*)0, 0));
soo_ioctl(fp
, cmd
, data
, p
)
register struct socket
*so
= (struct socket
*)fp
->f_data
;
so
->so_state
&= ~SS_NBIO
;
so
->so_state
|= SS_ASYNC
;
so
->so_rcv
.sb_flags
|= SB_ASYNC
;
so
->so_snd
.sb_flags
|= SB_ASYNC
;
so
->so_state
&= ~SS_ASYNC
;
so
->so_rcv
.sb_flags
&= ~SB_ASYNC
;
so
->so_snd
.sb_flags
&= ~SB_ASYNC
;
*(int *)data
= so
->so_rcv
.sb_cc
;
so
->so_pgid
= *(int *)data
;
*(int *)data
= so
->so_pgid
;
*(int *)data
= (so
->so_state
&SS_RCVATMARK
) != 0;
* Interface/routing/protocol specific ioctls:
* interface and routing ioctls should have a
* different entry since a socket's unnecessary
if (IOCGROUP(cmd
) == 'i')
return (ifioctl(so
, cmd
, data
, p
));
if (IOCGROUP(cmd
) == 'r')
return (rtioctl(cmd
, data
, p
));
return ((*so
->so_proto
->pr_usrreq
)(so
, PRU_CONTROL
,
(struct mbuf
*)cmd
, (struct mbuf
*)data
, (struct mbuf
*)0));
register struct socket
*so
= (struct socket
*)fp
->f_data
;
register int s
= splnet();
sbselqueue(&so
->so_rcv
, p
);
sbselqueue(&so
->so_snd
, p
);
(so
->so_state
& SS_RCVATMARK
)) {
sbselqueue(&so
->so_rcv
, p
);
register struct socket
*so
;
register struct stat
*ub
;
bzero((caddr_t
)ub
, sizeof (*ub
));
return ((*so
->so_proto
->pr_usrreq
)(so
, PRU_SENSE
,
(struct mbuf
*)ub
, (struct mbuf
*)0,
error
= soclose((struct socket
*)fp
->f_data
);