diff options
author | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-19 23:27:33 +0000 |
---|---|---|
committer | wtc@chromium.org <wtc@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-19 23:27:33 +0000 |
commit | b2197853ee021e8b6d1c4f3c46e475da372b6980 (patch) | |
tree | 3429dcfc22d7f3ec683bbe2c1923b208d78adb26 /net/base/ssl_client_socket_nss.cc | |
parent | 814c99861aa1116c588a63b20dd1b7a4f9a974e0 (diff) | |
download | chromium_src-b2197853ee021e8b6d1c4f3c46e475da372b6980.zip chromium_src-b2197853ee021e8b6d1c4f3c46e475da372b6980.tar.gz chromium_src-b2197853ee021e8b6d1c4f3c46e475da372b6980.tar.bz2 |
If an idle socket has received data unexpectedly, we can't
reuse it.
Add the IsConnectedAndIdle method, which returns true if the
connection is still alive and idle (hasn't received any data
unexpectedly).
R=eroman
BUG=4606
Review URL: http://codereview.chromium.org/21501
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10060 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/ssl_client_socket_nss.cc')
-rw-r--r-- | net/base/ssl_client_socket_nss.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/net/base/ssl_client_socket_nss.cc b/net/base/ssl_client_socket_nss.cc index f67c246..648f807 100644 --- a/net/base/ssl_client_socket_nss.cc +++ b/net/base/ssl_client_socket_nss.cc @@ -165,12 +165,32 @@ void SSLClientSocketNSS::Disconnect() { } bool SSLClientSocketNSS::IsConnected() const { + // Ideally, we should also check if we have received the close_notify alert + // message from the server, and return false in that case. We're not doing + // that, so this function may return a false positive. Since the upper + // layer (HttpNetworkTransaction) needs to handle a persistent connection + // closed by the server when we send a request anyway, a false positive in + // exchange for simpler code is a good trade-off. EnterFunction(""); bool ret = completed_handshake_ && transport_->IsConnected(); LeaveFunction(""); return ret; } +bool SSLClientSocketNSS::IsConnectedAndIdle() const { + // Unlike IsConnected, this method doesn't return a false positive. + // + // Strictly speaking, we should check if we have received the close_notify + // alert message from the server, and return false in that case. Although + // the close_notify alert message means EOF in the SSL layer, it is just + // bytes to the transport layer below, so transport_->IsConnectedAndIdle() + // returns the desired false when we receive close_notify. + EnterFunction(""); + bool ret = completed_handshake_ && transport_->IsConnectedAndIdle(); + LeaveFunction(""); + return ret; +} + int SSLClientSocketNSS::Read(char* buf, int buf_len, CompletionCallback* callback) { EnterFunction(buf_len); |