From c60ca347195215266f42f028bf6f05600e7b8d9f Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 2 Apr 2020 17:50:11 +0900 Subject: [PATCH] Ensure complete packet is written --- src/h2load_quic.cc | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/h2load_quic.cc b/src/h2load_quic.cc index 86b6f074..1e29d4d9 100644 --- a/src/h2load_quic.cc +++ b/src/h2load_quic.cc @@ -647,7 +647,13 @@ int Client::write_quic() { case NGTCP2_ERR_STREAM_SHUT_WR: if (nwrite == NGTCP2_ERR_STREAM_DATA_BLOCKED && ngtcp2_conn_get_max_data_left(quic.conn) == 0) { - return 0; + /* Call ngtcp2_conn_writev_stream to ensure that a complete + packet is written to the buffer. */ + nwrite = ngtcp2_conn_writev_stream( + quic.conn, &ps.path, buf.data(), quic.max_pktlen, nullptr, + NGTCP2_WRITE_STREAM_FLAG_NONE, /* stream_id = */ 0, /* fin = */ 0, + nullptr, 0, timestamp(worker->loop)); + break; } if (s->block_stream(stream_id) != 0) { @@ -662,8 +668,10 @@ int Client::write_quic() { continue; } - quic.last_error = quic::err_transport(nwrite); - return -1; + if (nwrite < 0) { + quic.last_error = quic::err_transport(nwrite); + return -1; + } } quic_restart_pkt_timer();