It should belong to send buffer as the SS_CANTSENDMORE flag.
Index: sys/kern/uipc_socket.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_socket.c,v
retrieving revision 1.295
diff -u -p -r1.295 uipc_socket.c
--- sys/kern/uipc_socket.c 22 Jan 2023 12:05:44 -0000 1.295
+++ sys/kern/uipc_socket.c 23 Jan 2023 11:05:09 -0000
@@ -578,7 +578,7 @@ sosend(struct socket *so, struct mbuf *a
restart:
if ((error = sblock(so, &so->so_snd, SBLOCKWAIT(flags))) != 0)
goto out;
- so->so_state |= SS_ISSENDING;
+ so->so_snd.sb_state |= SS_ISSENDING;
do {
if (so->so_snd.sb_state & SS_CANTSENDMORE)
snderr(EPIPE);
@@ -612,7 +612,7 @@ restart:
snderr(EWOULDBLOCK);
sbunlock(so, &so->so_snd);
error = sbwait(so, &so->so_snd);
- so->so_state &= ~SS_ISSENDING;
+ so->so_snd.sb_state &= ~SS_ISSENDING;
if (error)
goto out;
goto restart;
@@ -638,7 +638,7 @@ restart:
top->m_flags |= M_EOR;
}
if (resid == 0)
- so->so_state &= ~SS_ISSENDING;
+ so->so_snd.sb_state &= ~SS_ISSENDING;
if (top && so->so_options & SO_ZEROIZE)
top->m_flags |= M_ZEROIZE;
if (flags & MSG_OOB)
@@ -654,7 +654,7 @@ restart:
} while (resid);
release:
- so->so_state &= ~SS_ISSENDING;
+ so->so_snd.sb_state &= ~SS_ISSENDING;
sbunlock(so, &so->so_snd);
out:
sounlock(so);
@@ -1502,7 +1502,7 @@ somove(struct socket *so, int wait)
goto release;
len = space;
}
- sosp->so_state |= SS_ISSENDING;
+ sosp->so_snd.sb_state |= SS_ISSENDING;
SBLASTRECORDCHK(&so->so_rcv, "somove 1");
SBLASTMBUFCHK(&so->so_rcv, "somove 1");
@@ -1697,7 +1697,7 @@ somove(struct socket *so, int wait)
/* Append all remaining data to drain socket. */
if (so->so_rcv.sb_cc == 0 || maxreached)
- sosp->so_state &= ~SS_ISSENDING;
+ sosp->so_snd.sb_state &= ~SS_ISSENDING;
error = pru_send(sosp, m, NULL, NULL);
if (error) {
if (sosp->so_snd.sb_state & SS_CANTSENDMORE)
@@ -1711,7 +1711,7 @@ somove(struct socket *so, int wait)
goto nextpkt;
release:
- sosp->so_state &= ~SS_ISSENDING;
+ sosp->so_snd.sb_state &= ~SS_ISSENDING;
if (!error && maxreached && so->so_splicemax == so->so_splicelen)
error = EFBIG;
if (error)
Index: sys/sys/socketvar.h
===================================================================
RCS file: /cvs/src/sys/sys/socketvar.h,v
retrieving revision 1.116
diff -u -p -r1.116 socketvar.h
--- sys/sys/socketvar.h 22 Jan 2023 12:05:44 -0000 1.116
+++ sys/sys/socketvar.h 23 Jan 2023 11:05:09 -0000
@@ -146,7 +146,8 @@ struct socket {
* NOTE: The following states should be used with corresponding socket's
* buffer `sb_state' only:
*
- * SS_CANTSENDMORE with `so_snd'
+ * SS_CANTSENDMORE with `so_snd'
+ * SS_ISSENDING with `so_snd'
* SS_CANTRCVMORE with `so_rcv'
* SS_RCVATMARK with `so_rcv'
*/
@@ -225,7 +226,7 @@ sbspace(struct socket *so, struct sockbu
/* are we sending on this socket? */
#define soissending(so) \
- ((so)->so_state & SS_ISSENDING)
+ ((so)->so_snd.sb_state & SS_ISSENDING)
/* can we read something from so? */
static inline int