Skip to content

Commit 3b29cd0

Browse files
committed
1 parent 109b624 commit 3b29cd0

File tree

2 files changed

+23
-17
lines changed

2 files changed

+23
-17
lines changed

httplib.h

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5737,22 +5737,7 @@ inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl,
57375737
read_timeout_usec_(read_timeout_usec),
57385738
write_timeout_sec_(write_timeout_sec),
57395739
write_timeout_usec_(write_timeout_usec) {
5740-
{
5741-
timeval tv;
5742-
tv.tv_sec = static_cast<long>(read_timeout_sec);
5743-
tv.tv_usec = static_cast<decltype(tv.tv_usec)>(read_timeout_usec);
5744-
5745-
setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<char *>(&tv),
5746-
sizeof(tv));
5747-
}
5748-
{
5749-
timeval tv;
5750-
tv.tv_sec = static_cast<long>(write_timeout_sec);
5751-
tv.tv_usec = static_cast<decltype(tv.tv_usec)>(write_timeout_usec);
5752-
5753-
setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, reinterpret_cast<char *>(&tv),
5754-
sizeof(tv));
5755-
}
5740+
SSL_clear_mode(ssl, SSL_MODE_AUTO_RETRY);
57565741
}
57575742

57585743
inline SSLSocketStream::~SSLSocketStream() {}
@@ -5767,8 +5752,27 @@ inline bool SSLSocketStream::is_writable() const {
57675752
}
57685753

57695754
inline ssize_t SSLSocketStream::read(char *ptr, size_t size) {
5770-
if (SSL_pending(ssl_) > 0 || is_readable()) {
5755+
if (SSL_pending(ssl_) > 0) {
57715756
return SSL_read(ssl_, ptr, static_cast<int>(size));
5757+
} else if (is_readable()) {
5758+
auto ret = SSL_read(ssl_, ptr, static_cast<int>(size));
5759+
if (ret < 0) {
5760+
auto err = SSL_get_error(ssl_, ret);
5761+
while (err == SSL_ERROR_WANT_READ) {
5762+
if (SSL_pending(ssl_) > 0) {
5763+
return SSL_read(ssl_, ptr, static_cast<int>(size));
5764+
} else if (is_readable()) {
5765+
ret = SSL_read(ssl_, ptr, static_cast<int>(size));
5766+
if (ret >= 0) {
5767+
return ret;
5768+
}
5769+
err = SSL_get_error(ssl_, ret);
5770+
} else {
5771+
return -1;
5772+
}
5773+
}
5774+
}
5775+
return ret;
57725776
}
57735777
return -1;
57745778
}

test/test.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3299,6 +3299,7 @@ TEST(SSLClientServerTest, ClientCertPresent) {
32993299
t.join();
33003300
}
33013301

3302+
#if !defined(_WIN32) || defined(OPENSSL_USE_APPLINK)
33023303
TEST(SSLClientServerTest, MemoryClientCertPresent) {
33033304
X509 *server_cert;
33043305
EVP_PKEY *server_private_key;
@@ -3374,6 +3375,7 @@ TEST(SSLClientServerTest, MemoryClientCertPresent) {
33743375

33753376
t.join();
33763377
}
3378+
#endif
33773379

33783380
TEST(SSLClientServerTest, ClientCertMissing) {
33793381
SSLServer svr(SERVER_CERT_FILE, SERVER_PRIVATE_KEY_FILE, CLIENT_CA_CERT_FILE,

0 commit comments

Comments
 (0)