}
conn->mux_ctx = ctx;
ctx->cs = cs;
+ cs->flags |= CS_FL_RCV_MORE;
return 0;
fail_free:
goto fail;
ctx->cs = cs;
+ cs->flags |= CS_FL_RCV_MORE;
return (cs);
fail:
return NULL;
{
if (cs->flags & CS_FL_SHR)
return;
+ cs->flags &= ~CS_FL_RCV_MORE;
if (conn_xprt_ready(cs->conn) && cs->conn->xprt->shutr)
cs->conn->xprt->shutr(cs->conn, (mode == CS_SHR_DRAIN));
if (cs->flags & CS_FL_SHW)
cs->flags |= CS_FL_RCV_MORE;
return 0;
}
- cs->flags &= ~CS_FL_RCV_MORE;
ret = cs->conn->xprt->rcv_buf(cs->conn, buf, count, flags);
- if (conn_xprt_read0_pending(cs->conn))
+ if (conn_xprt_read0_pending(cs->conn)) {
+ if (ret == 0)
+ cs->flags &= ~CS_FL_RCV_MORE;
cs->flags |= CS_FL_EOS;
- if (cs->conn->flags & CO_FL_ERROR)
+ }
+ if (cs->conn->flags & CO_FL_ERROR) {
+ if (ret == 0)
+ cs->flags &= ~CS_FL_RCV_MORE;
cs->flags |= CS_FL_ERROR;
+ }
return ret;
}