MINOR: stconn: Add a connection flag to notify sending data are the last ones

This flag can be use by endpoints to know the data to send, via .snd_buf
callback function are the last ones. It is useful to know a shutdown is
pending but it cannot be delivered while sedning data are not consumed.
This commit is contained in:
Christopher Faulet 2024-02-20 08:43:09 +01:00
parent a933569b52
commit 838fb54de6
2 changed files with 10 additions and 1 deletions

View File

@ -278,6 +278,7 @@ enum {
enum { enum {
CO_SFL_MSG_MORE = 0x0001, /* More data to come afterwards */ CO_SFL_MSG_MORE = 0x0001, /* More data to come afterwards */
CO_SFL_STREAMER = 0x0002, /* Producer is continuously streaming data */ CO_SFL_STREAMER = 0x0002, /* Producer is continuously streaming data */
CO_SFL_LAST_DATA = 0x0003, /* Sent data are the last ones, shutdown is pending */
}; };
/* mux->shutr() modes */ /* mux->shutr() modes */

View File

@ -1636,6 +1636,9 @@ int sc_conn_send(struct stconn *sc)
} }
} }
if ((sc->flags & SC_FL_SHUT_WANTED) && co_data(oc) == c_data(oc))
send_flag |= CO_SFL_LAST_DATA;
ret = conn->mux->snd_buf(sc, &oc->buf, co_data(oc), send_flag); ret = conn->mux->snd_buf(sc, &oc->buf, co_data(oc), send_flag);
if (ret > 0) { if (ret > 0) {
did_send = 1; did_send = 1;
@ -2154,7 +2157,12 @@ int sc_applet_send(struct stconn *sc)
BUG_ON(sc_ep_have_ff_data(sc)); BUG_ON(sc_ep_have_ff_data(sc));
if (co_data(oc)) { if (co_data(oc)) {
ret = appctx_snd_buf(sc, &oc->buf, co_data(oc), 0); unsigned int send_flag = 0;
if ((sc->flags & SC_FL_SHUT_WANTED) && co_data(oc) == c_data(oc))
send_flag |= CO_SFL_LAST_DATA;
ret = appctx_snd_buf(sc, &oc->buf, co_data(oc), send_flag);
if (ret > 0) { if (ret > 0) {
did_send = 1; did_send = 1;
c_rew(oc, ret); c_rew(oc, ret);