diff --git a/rtc_base/openssladapter.cc b/rtc_base/openssladapter.cc index a064596881..e3643a54eb 100644 --- a/rtc_base/openssladapter.cc +++ b/rtc_base/openssladapter.cc @@ -94,7 +94,6 @@ static BIO* BIO_new_socket(rtc::AsyncSocket* socket) { static int socket_new(BIO* b) { b->shutdown = 0; b->init = 1; - b->num = 0; // 1 means socket closed b->ptr = 0; return 1; } @@ -113,8 +112,6 @@ static int socket_read(BIO* b, char* out, int outl) { int result = socket->Recv(out, outl, nullptr); if (result > 0) { return result; - } else if (result == 0) { - b->num = 1; } else if (socket->IsBlocking()) { BIO_set_retry_read(b); } @@ -143,8 +140,11 @@ static long socket_ctrl(BIO* b, int cmd, long num, void* ptr) { switch (cmd) { case BIO_CTRL_RESET: return 0; - case BIO_CTRL_EOF: - return b->num; + case BIO_CTRL_EOF: { + rtc::AsyncSocket* socket = static_cast(ptr); + // 1 means socket closed. + return (socket->GetState() == rtc::AsyncSocket::CS_CLOSED) ? 1 : 0; + } case BIO_CTRL_WPENDING: case BIO_CTRL_PENDING: return 0; diff --git a/rtc_base/opensslstreamadapter.cc b/rtc_base/opensslstreamadapter.cc index 52a0b77623..8f66c303a9 100644 --- a/rtc_base/opensslstreamadapter.cc +++ b/rtc_base/opensslstreamadapter.cc @@ -181,7 +181,6 @@ static BIO* BIO_new_stream(StreamInterface* stream) { static int stream_new(BIO* b) { b->shutdown = 0; b->init = 1; - b->num = 0; // 1 means end-of-stream b->ptr = 0; return 1; } @@ -202,8 +201,6 @@ static int stream_read(BIO* b, char* out, int outl) { StreamResult result = stream->Read(out, outl, &read, &error); if (result == SR_SUCCESS) { return checked_cast(read); - } else if (result == SR_EOS) { - b->num = 1; } else if (result == SR_BLOCK) { BIO_set_retry_read(b); } @@ -234,8 +231,11 @@ static long stream_ctrl(BIO* b, int cmd, long num, void* ptr) { switch (cmd) { case BIO_CTRL_RESET: return 0; - case BIO_CTRL_EOF: - return b->num; + case BIO_CTRL_EOF: { + StreamInterface* stream = static_cast(ptr); + // 1 means end-of-stream. + return (stream->GetState() == SS_CLOSED) ? 1 : 0; + } case BIO_CTRL_WPENDING: case BIO_CTRL_PENDING: return 0;