diff --git a/mongoose.c b/mongoose.c index 936828b4..f4130f23 100644 --- a/mongoose.c +++ b/mongoose.c @@ -13619,6 +13619,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; long n = mbedtls_ssl_read(&tls->ssl, (unsigned char *) buf, len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n == MBEDTLS_ERR_SSL_WANT_READ || n == MBEDTLS_ERR_SSL_WANT_WRITE) return MG_IO_WAIT; #if defined(MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) @@ -13937,6 +13938,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; int n = SSL_read(tls->ssl, buf, (int) len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n < 0 && mg_tls_err(c, tls, n) == 0) return MG_IO_WAIT; if (n <= 0) return MG_IO_ERR; return n; diff --git a/src/tls_mbed.c b/src/tls_mbed.c index 187b4b1a..afcb0432 100644 --- a/src/tls_mbed.c +++ b/src/tls_mbed.c @@ -177,6 +177,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; long n = mbedtls_ssl_read(&tls->ssl, (unsigned char *) buf, len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n == MBEDTLS_ERR_SSL_WANT_READ || n == MBEDTLS_ERR_SSL_WANT_WRITE) return MG_IO_WAIT; #if defined(MBEDTLS_ERR_SSL_RECEIVED_NEW_SESSION_TICKET) diff --git a/src/tls_openssl.c b/src/tls_openssl.c index 58d45c31..d2382543 100644 --- a/src/tls_openssl.c +++ b/src/tls_openssl.c @@ -256,6 +256,7 @@ size_t mg_tls_pending(struct mg_connection *c) { long mg_tls_recv(struct mg_connection *c, void *buf, size_t len) { struct mg_tls *tls = (struct mg_tls *) c->tls; int n = SSL_read(tls->ssl, buf, (int) len); + if (!c->is_tls_hs && buf == NULL && n == 0) return 0; // TODO(): MIP if (n < 0 && mg_tls_err(c, tls, n) == 0) return MG_IO_WAIT; if (n <= 0) return MG_IO_ERR; return n;