-/* $OpenBSD: sys_socket.c,v 1.56 2022/11/19 14:26:39 kn Exp $ */
+/* $OpenBSD: sys_socket.c,v 1.57 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: sys_socket.c,v 1.13 1995/08/12 23:59:09 mycroft Exp $ */
/*
solock(so);
if ((so->so_state & SS_CANTRCVMORE) == 0 || so->so_rcv.sb_cc != 0)
ub->st_mode |= S_IRUSR | S_IRGRP | S_IROTH;
- if ((so->so_state & SS_CANTSENDMORE) == 0)
+ if ((so->so_snd.sb_state & SBS_CANTSENDMORE) == 0)
ub->st_mode |= S_IWUSR | S_IWGRP | S_IWOTH;
ub->st_uid = so->so_euid;
ub->st_gid = so->so_egid;
-/* $OpenBSD: uipc_socket.c,v 1.291 2022/11/28 21:39:28 mvs Exp $ */
+/* $OpenBSD: uipc_socket.c,v 1.292 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: uipc_socket.c,v 1.21 1996/02/04 02:17:52 christos Exp $ */
/*
goto out;
so->so_state |= SS_ISSENDING;
do {
- if (so->so_state & SS_CANTSENDMORE)
+ if (so->so_snd.sb_state & SBS_CANTSENDMORE)
snderr(EPIPE);
if (so->so_error) {
error = so->so_error;
error = so->so_error;
goto release;
}
- if (sosp->so_state & SS_CANTSENDMORE) {
+ if (sosp->so_snd.sb_state & SBS_CANTSENDMORE) {
error = EPIPE;
goto release;
}
if (o) {
error = pru_send(sosp, m, NULL, NULL);
if (error) {
- if (sosp->so_state & SS_CANTSENDMORE)
+ if (sosp->so_snd.sb_state &
+ SBS_CANTSENDMORE)
error = EPIPE;
m_freem(o);
goto release;
*mtod(o, caddr_t) = *mtod(m, caddr_t);
error = pru_sendoob(sosp, o, NULL, NULL);
if (error) {
- if (sosp->so_state & SS_CANTSENDMORE)
+ if (sosp->so_snd.sb_state & SBS_CANTSENDMORE)
error = EPIPE;
m_freem(m);
goto release;
sosp->so_state &= ~SS_ISSENDING;
error = pru_send(sosp, m, NULL, NULL);
if (error) {
- if (sosp->so_state & SS_CANTSENDMORE)
+ if (sosp->so_snd.sb_state & SBS_CANTSENDMORE)
error = EPIPE;
goto release;
}
if (error)
so->so_error = error;
if (((so->so_state & SS_CANTRCVMORE) && so->so_rcv.sb_cc == 0) ||
- (sosp->so_state & SS_CANTSENDMORE) || maxreached || error) {
+ (sosp->so_snd.sb_state & SBS_CANTSENDMORE) ||
+ maxreached || error) {
sounsplice(so, sosp, 0);
return (0);
}
switch (optname) {
case SO_SNDBUF:
- if (so->so_state & SS_CANTSENDMORE)
+ if (so->so_snd.sb_state & SBS_CANTSENDMORE)
return (EINVAL);
if (sbcheckreserve(cnt, so->so_snd.sb_wat) ||
sbreserve(so, &so->so_snd, cnt))
soassertlocked(so);
kn->kn_data = sbspace(so, &so->so_snd);
- if (so->so_state & SS_CANTSENDMORE) {
+ if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
kn->kn_flags |= EV_EOF;
if (kn->kn_flags & __EV_POLL) {
if (so->so_state & SS_ISDISCONNECTED)
-/* $OpenBSD: uipc_socket2.c,v 1.129 2022/10/03 16:43:52 bluhm Exp $ */
+/* $OpenBSD: uipc_socket2.c,v 1.130 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $ */
/*
{
soassertlocked(so);
so->so_state &= ~SS_ISCONNECTING;
- so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE|SS_CANTSENDMORE);
+ so->so_state |= (SS_ISDISCONNECTING|SS_CANTRCVMORE);
+ so->so_snd.sb_state |= SBS_CANTSENDMORE;
wakeup(&so->so_timeo);
sowwakeup(so);
sorwakeup(so);
{
soassertlocked(so);
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
- so->so_state |= (SS_CANTRCVMORE|SS_CANTSENDMORE|SS_ISDISCONNECTED);
+ so->so_state |= (SS_CANTRCVMORE|SS_ISDISCONNECTED);
+ so->so_snd.sb_state |= SBS_CANTSENDMORE;
wakeup(&so->so_timeo);
sowwakeup(so);
sorwakeup(so);
socantsendmore(struct socket *so)
{
soassertlocked(so);
- so->so_state |= SS_CANTSENDMORE;
+ so->so_snd.sb_state |= SBS_CANTSENDMORE;
sowwakeup(so);
}
-/* $OpenBSD: uipc_usrreq.c,v 1.195 2022/12/05 23:18:37 deraadt Exp $ */
+/* $OpenBSD: uipc_usrreq.c,v 1.196 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: uipc_usrreq.c,v 1.18 1996/02/09 19:00:50 christos Exp $ */
/*
goto out;
}
- if (so->so_state & SS_CANTSENDMORE) {
+ if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
error = EPIPE;
goto dispose;
}
-/* $OpenBSD: fifo_vnops.c,v 1.96 2022/07/01 09:56:17 mvs Exp $ */
+/* $OpenBSD: fifo_vnops.c,v 1.97 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: fifo_vnops.c,v 1.18 1996/03/16 23:52:42 christos Exp $ */
/*
}
fip->fi_readers = fip->fi_writers = 0;
solock(wso);
- wso->so_state |= SS_CANTSENDMORE;
+ wso->so_snd.sb_state |= SBS_CANTSENDMORE;
wso->so_snd.sb_lowat = PIPE_BUF;
sounlock(wso);
} else {
fip->fi_readers++;
if (fip->fi_readers == 1) {
solock(wso);
- wso->so_state &= ~SS_CANTSENDMORE;
+ wso->so_snd.sb_state &= ~SBS_CANTSENDMORE;
sounlock(wso);
if (fip->fi_writers > 0)
wakeup(&fip->fi_writers);
soassertlocked(so);
kn->kn_data = sbspace(so, &so->so_snd);
- if (so->so_state & SS_CANTSENDMORE) {
+ if (so->so_snd.sb_state & SBS_CANTSENDMORE) {
kn->kn_flags |= EV_EOF;
rv = 1;
} else {
-/* $OpenBSD: tcp_usrreq.c,v 1.212 2022/11/09 15:01:24 claudio Exp $ */
+/* $OpenBSD: tcp_usrreq.c,v 1.213 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: tcp_usrreq.c,v 1.20 1996/02/13 23:44:16 christos Exp $ */
/*
ostate = tp->t_state;
}
- if (so->so_state & SS_CANTSENDMORE)
+ if (so->so_snd.sb_state & SBS_CANTSENDMORE)
goto out;
socantsendmore(so);
-/* $OpenBSD: socketvar.h,v 1.112 2022/11/26 17:52:35 mvs Exp $ */
+/* $OpenBSD: socketvar.h,v 1.113 2022/12/11 21:19:08 mvs Exp $ */
/* $NetBSD: socketvar.h,v 1.18 1996/02/09 18:25:38 christos Exp $ */
/*-
short sb_flags; /* flags, see below */
/* End area that is zeroed on flush. */
#define sb_endzero sb_flags
+ short sb_state; /* state, see below */
uint64_t sb_timeo_nsecs;/* timeout for read/write */
struct selinfo sb_sel; /* process selecting read/write */
} so_rcv, so_snd;
#define SB_SPLICE 0x20 /* buffer is splice source or drain */
#define SB_NOINTR 0x40 /* operations not interruptible */
+#define SBS_CANTSENDMORE 0x01 /* can't send more data to peer */
+
void (*so_upcall)(struct socket *so, caddr_t arg, int waitf);
caddr_t so_upcallarg; /* Arg for above */
uid_t so_euid, so_ruid; /* who opened the socket */
#define SS_ISCONNECTED 0x002 /* socket connected to a peer */
#define SS_ISCONNECTING 0x004 /* in process of connecting to peer */
#define SS_ISDISCONNECTING 0x008 /* in process of disconnecting */
-#define SS_CANTSENDMORE 0x010 /* can't send more data to peer */
#define SS_CANTRCVMORE 0x020 /* can't receive more data from peer */
#define SS_RCVATMARK 0x040 /* at mark on input */
#define SS_ISDISCONNECTED 0x800 /* socket disconnected from peer */
return ((sbspace(so, &so->so_snd) >= so->so_snd.sb_lowat &&
((so->so_state & SS_ISCONNECTED) ||
(so->so_proto->pr_flags & PR_CONNREQUIRED)==0)) ||
- (so->so_state & SS_CANTSENDMORE) || so->so_error);
+ (so->so_snd.sb_state & SBS_CANTSENDMORE) || so->so_error);
}
/* adjust counters in sb reflecting allocation of m */