diff --git a/webrtc/base/opensslstreamadapter.cc b/webrtc/base/opensslstreamadapter.cc index 070a948b14..133eb72b4c 100644 --- a/webrtc/base/opensslstreamadapter.cc +++ b/webrtc/base/opensslstreamadapter.cc @@ -695,6 +695,12 @@ void OpenSSLStreamAdapter::Cleanup() { } if (ssl_) { + int ret = SSL_shutdown(ssl_); + if (ret < 0) { + LOG(LS_WARNING) << "SSL_shutdown failed, error = " + << SSL_get_error(ssl_, ret); + } + SSL_free(ssl_); ssl_ = NULL; } diff --git a/webrtc/base/sslstreamadapter_unittest.cc b/webrtc/base/sslstreamadapter_unittest.cc index f7dcb71e48..053831437f 100644 --- a/webrtc/base/sslstreamadapter_unittest.cc +++ b/webrtc/base/sslstreamadapter_unittest.cc @@ -691,6 +691,13 @@ TEST_F(SSLStreamAdapterTestTLS, TestTLSConnect) { TestHandshake(); }; +// Test that closing the connection on one side updates the other side. +TEST_F(SSLStreamAdapterTestTLS, TestTLSClose) { + TestHandshake(); + client_ssl_->Close(); + EXPECT_EQ_WAIT(rtc::SS_CLOSED, server_ssl_->GetState(), handshake_wait_); +}; + // Test transfer -- trivial TEST_F(SSLStreamAdapterTestTLS, TestTLSTransfer) { TestHandshake();