Merge pull request #2134 from nghttp2/nghttpd-fix-stall

nghttpd: Fix read stall
This commit is contained in:
Tatsuhiro Tsujikawa
2024-04-04 17:08:17 +09:00
committed by GitHub

View File

@@ -750,34 +750,40 @@ int Http2Handler::read_tls() {
ERR_clear_error(); ERR_clear_error();
auto rv = SSL_read(ssl_, buf.data(), buf.size()); for (;;) {
auto rv = SSL_read(ssl_, buf.data(), buf.size());
if (rv <= 0) { if (rv <= 0) {
auto err = SSL_get_error(ssl_, rv); auto err = SSL_get_error(ssl_, rv);
switch (err) { switch (err) {
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
return write_(*this); return write_(*this);
case SSL_ERROR_WANT_WRITE: case SSL_ERROR_WANT_WRITE:
// renegotiation started // renegotiation started
return -1; return -1;
default: default:
return -1;
}
}
auto nread = rv;
if (get_config()->hexdump) {
util::hexdump(stdout, buf.data(), nread);
}
rv = nghttp2_session_mem_recv2(session_, buf.data(), nread);
if (rv < 0) {
if (rv != NGHTTP2_ERR_BAD_CLIENT_MAGIC) {
std::cerr << "nghttp2_session_mem_recv2() returned error: "
<< nghttp2_strerror(rv) << std::endl;
}
return -1; return -1;
} }
}
auto nread = rv; if (SSL_pending(ssl_) == 0) {
break;
if (get_config()->hexdump) {
util::hexdump(stdout, buf.data(), nread);
}
rv = nghttp2_session_mem_recv2(session_, buf.data(), nread);
if (rv < 0) {
if (rv != NGHTTP2_ERR_BAD_CLIENT_MAGIC) {
std::cerr << "nghttp2_session_mem_recv2() returned error: "
<< nghttp2_strerror(rv) << std::endl;
} }
return -1;
} }
return write_(*this); return write_(*this);