diff --git a/src/stream_sock.c b/src/stream_sock.c index 3e9784c28..0d55128a8 100644 --- a/src/stream_sock.c +++ b/src/stream_sock.c @@ -650,8 +650,6 @@ static int stream_sock_write_loop(struct stream_interface *si, struct buffer *b) send_flag |= MSG_MORE; } else if (b->flags & BF_EXPECT_MORE) { - /* it was forced on the buffer, this flag is one-shoot */ - b->flags &= ~BF_EXPECT_MORE; send_flag |= MSG_MORE; } @@ -661,9 +659,9 @@ static int stream_sock_write_loop(struct stream_interface *si, struct buffer *b) ret = send(si->fd, b->w, max, send_flag); - /* disable it only once everything has been sent */ - if (ret == max && (b->flags & BF_SEND_DONTWAIT)) - b->flags &= ~BF_SEND_DONTWAIT; + /* Always clear both flags once everything has been sent */ + if (ret == max) + b->flags &= ~(BF_EXPECT_MORE | BF_SEND_DONTWAIT); } else { int skerr; socklen_t lskerr = sizeof(skerr);