CS_FL_EOS = 0x00001000, /* End of stream delivered to data layer */
CS_FL_REOS = 0x00002000, /* End of stream received (buffer not empty) */
CS_FL_WAIT_FOR_HS = 0x00010000, /* This stream is waiting for handhskae */
+ CS_FL_KILL_CONN = 0x00020000, /* must kill the connection when the CS closes */
/* following flags are supposed to be set by the mux and read/unset by
* the stream-interface :
if (si->state != SI_ST_EST && si->state != SI_ST_CON)
return;
+ if (si->flags & SI_FL_KILL_CONN)
+ cs->flags |= CS_FL_KILL_CONN;
+
if (si_oc(si)->flags & CF_SHUTW) {
cs_close(cs);
si->state = SI_ST_DIS;
* However, if SI_FL_NOLINGER is explicitly set, we know there is
* no risk so we close both sides immediately.
*/
+ if (si->flags & SI_FL_KILL_CONN)
+ cs->flags |= CS_FL_KILL_CONN;
+
if (si->flags & SI_FL_ERR) {
/* quick close, the socket is alredy shut anyway */
}
/* we may have to close a pending connection, and mark the
* response buffer as shutr
*/
+ if (si->flags & SI_FL_KILL_CONN)
+ cs->flags |= CS_FL_KILL_CONN;
cs_close(cs);
/* fall through */
case SI_ST_CER: