diff options
Diffstat (limited to 'net/base/tcp_client_socket_win.cc')
-rw-r--r-- | net/base/tcp_client_socket_win.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/base/tcp_client_socket_win.cc b/net/base/tcp_client_socket_win.cc index d2a1452..18afe03c 100644 --- a/net/base/tcp_client_socket_win.cc +++ b/net/base/tcp_client_socket_win.cc @@ -157,6 +157,22 @@ bool TCPClientSocket::IsConnected() const { return true; } +bool TCPClientSocket::IsConnectedAndIdle() const { + if (socket_ == INVALID_SOCKET || wait_state_ == WAITING_CONNECT) + return false; + + // Check if connection is alive and we haven't received any data + // unexpectedly. + char c; + int rv = recv(socket_, &c, 1, MSG_PEEK); + if (rv >= 0) + return false; + if (WSAGetLastError() != WSAEWOULDBLOCK) + return false; + + return true; +} + int TCPClientSocket::Read(char* buf, int buf_len, CompletionCallback* callback) { |