On Mon, Jan 23, 2023 at 02:09:14PM +0300, Vitaliy Makkoveev wrote: > It should belong to send buffer as the SS_CANTSENDMORE flag.
OK bluhm@ > 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