| 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 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 int os_error = WSAGetLastError(); | 737 int os_error = WSAGetLastError(); |
| 738 if (os_error != WSA_IO_PENDING) | 738 if (os_error != WSA_IO_PENDING) |
| 739 return MapSystemError(os_error); | 739 return MapSystemError(os_error); |
| 740 } | 740 } |
| 741 core_->WatchForRead(); | 741 core_->WatchForRead(); |
| 742 waiting_read_ = true; | 742 waiting_read_ = true; |
| 743 old_read_callback_ = callback; | 743 old_read_callback_ = callback; |
| 744 core_->read_iobuffer_ = buf; | 744 core_->read_iobuffer_ = buf; |
| 745 return ERR_IO_PENDING; | 745 return ERR_IO_PENDING; |
| 746 } | 746 } |
| 747 int TCPClientSocketWin::Read(IOBuffer* buf, |
| 748 int buf_len, |
| 749 const CompletionCallback& callback) { |
| 750 DCHECK(CalledOnValidThread()); |
| 751 DCHECK_NE(socket_, INVALID_SOCKET); |
| 752 DCHECK(!waiting_read_); |
| 753 DCHECK(!old_read_callback_ && read_callback_.is_null()); |
| 754 DCHECK(!core_->read_iobuffer_); |
| 755 |
| 756 buf_len = core_->ThrottleReadSize(buf_len); |
| 757 |
| 758 core_->read_buffer_.len = buf_len; |
| 759 core_->read_buffer_.buf = buf->data(); |
| 760 |
| 761 // TODO(wtc): Remove the assertion after enough testing. |
| 762 AssertEventNotSignaled(core_->read_overlapped_.hEvent); |
| 763 DWORD num, flags = 0; |
| 764 int rv = WSARecv(socket_, &core_->read_buffer_, 1, &num, &flags, |
| 765 &core_->read_overlapped_, NULL); |
| 766 if (rv == 0) { |
| 767 if (ResetEventIfSignaled(core_->read_overlapped_.hEvent)) { |
| 768 base::StatsCounter read_bytes("tcp.read_bytes"); |
| 769 read_bytes.Add(num); |
| 770 num_bytes_read_ += num; |
| 771 if (num > 0) |
| 772 use_history_.set_was_used_to_convey_data(); |
| 773 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, num, |
| 774 core_->read_buffer_.buf); |
| 775 return static_cast<int>(num); |
| 776 } |
| 777 } else { |
| 778 int os_error = WSAGetLastError(); |
| 779 if (os_error != WSA_IO_PENDING) |
| 780 return MapSystemError(os_error); |
| 781 } |
| 782 core_->WatchForRead(); |
| 783 waiting_read_ = true; |
| 784 read_callback_ = callback; |
| 785 core_->read_iobuffer_ = buf; |
| 786 return ERR_IO_PENDING; |
| 787 } |
| 747 | 788 |
| 748 int TCPClientSocketWin::Write(IOBuffer* buf, | 789 int TCPClientSocketWin::Write(IOBuffer* buf, |
| 749 int buf_len, | 790 int buf_len, |
| 750 OldCompletionCallback* callback) { | 791 OldCompletionCallback* callback) { |
| 751 DCHECK(CalledOnValidThread()); | 792 DCHECK(CalledOnValidThread()); |
| 752 DCHECK_NE(socket_, INVALID_SOCKET); | 793 DCHECK_NE(socket_, INVALID_SOCKET); |
| 753 DCHECK(!waiting_write_); | 794 DCHECK(!waiting_write_); |
| 754 DCHECK(!write_callback_); | 795 DCHECK(!write_callback_); |
| 755 DCHECK_GT(buf_len, 0); | 796 DCHECK_GT(buf_len, 0); |
| 756 DCHECK(!core_->write_iobuffer_); | 797 DCHECK(!core_->write_iobuffer_); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 939 use_history_.set_was_used_to_convey_data(); | 980 use_history_.set_was_used_to_convey_data(); |
| 940 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, num_bytes, | 981 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, num_bytes, |
| 941 core_->write_buffer_.buf); | 982 core_->write_buffer_.buf); |
| 942 } | 983 } |
| 943 } | 984 } |
| 944 core_->write_iobuffer_ = NULL; | 985 core_->write_iobuffer_ = NULL; |
| 945 DoWriteCallback(rv); | 986 DoWriteCallback(rv); |
| 946 } | 987 } |
| 947 | 988 |
| 948 } // namespace net | 989 } // namespace net |
| OLD | NEW |