OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/socket/tcp_client_socket_win.h" | 5 #include "net/socket/tcp_client_socket_win.h" |
6 | 6 |
7 #include <mstcpip.h> | 7 #include <mstcpip.h> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 | 582 |
583 previously_disconnected_ = true; | 583 previously_disconnected_ = true; |
584 } | 584 } |
585 | 585 |
586 bool TCPClientSocketWin::IsConnected() const { | 586 bool TCPClientSocketWin::IsConnected() const { |
587 DCHECK(CalledOnValidThread()); | 587 DCHECK(CalledOnValidThread()); |
588 | 588 |
589 if (socket_ == INVALID_SOCKET || waiting_connect()) | 589 if (socket_ == INVALID_SOCKET || waiting_connect()) |
590 return false; | 590 return false; |
591 | 591 |
| 592 if (waiting_read_) |
| 593 return true; |
| 594 |
592 // Check if connection is alive. | 595 // Check if connection is alive. |
593 char c; | 596 char c; |
594 int rv = recv(socket_, &c, 1, MSG_PEEK); | 597 int rv = recv(socket_, &c, 1, MSG_PEEK); |
595 if (rv == 0) | 598 if (rv == 0) |
596 return false; | 599 return false; |
597 if (rv == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) | 600 if (rv == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) |
598 return false; | 601 return false; |
599 | 602 |
600 return true; | 603 return true; |
601 } | 604 } |
602 | 605 |
603 bool TCPClientSocketWin::IsConnectedAndIdle() const { | 606 bool TCPClientSocketWin::IsConnectedAndIdle() const { |
604 DCHECK(CalledOnValidThread()); | 607 DCHECK(CalledOnValidThread()); |
605 | 608 |
606 if (socket_ == INVALID_SOCKET || waiting_connect()) | 609 if (socket_ == INVALID_SOCKET || waiting_connect()) |
607 return false; | 610 return false; |
608 | 611 |
| 612 if (waiting_read_) |
| 613 return true; |
| 614 |
609 // Check if connection is alive and we haven't received any data | 615 // Check if connection is alive and we haven't received any data |
610 // unexpectedly. | 616 // unexpectedly. |
611 char c; | 617 char c; |
612 int rv = recv(socket_, &c, 1, MSG_PEEK); | 618 int rv = recv(socket_, &c, 1, MSG_PEEK); |
613 if (rv >= 0) | 619 if (rv >= 0) |
614 return false; | 620 return false; |
615 if (WSAGetLastError() != WSAEWOULDBLOCK) | 621 if (WSAGetLastError() != WSAEWOULDBLOCK) |
616 return false; | 622 return false; |
617 | 623 |
618 return true; | 624 return true; |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
898 use_history_.set_was_used_to_convey_data(); | 904 use_history_.set_was_used_to_convey_data(); |
899 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, num_bytes, | 905 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, num_bytes, |
900 core_->write_buffer_.buf); | 906 core_->write_buffer_.buf); |
901 } | 907 } |
902 } | 908 } |
903 core_->write_iobuffer_ = NULL; | 909 core_->write_iobuffer_ = NULL; |
904 DoWriteCallback(rv); | 910 DoWriteCallback(rv); |
905 } | 911 } |
906 | 912 |
907 } // namespace net | 913 } // namespace net |
OLD | NEW |