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 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
702 base::TimeDelta TCPClientSocketWin::GetConnectTimeMicros() const { | 702 base::TimeDelta TCPClientSocketWin::GetConnectTimeMicros() const { |
703 return connect_time_micros_; | 703 return connect_time_micros_; |
704 } | 704 } |
705 | 705 |
706 int TCPClientSocketWin::Read(IOBuffer* buf, | 706 int TCPClientSocketWin::Read(IOBuffer* buf, |
707 int buf_len, | 707 int buf_len, |
708 OldCompletionCallback* callback) { | 708 OldCompletionCallback* callback) { |
709 DCHECK(CalledOnValidThread()); | 709 DCHECK(CalledOnValidThread()); |
710 DCHECK_NE(socket_, INVALID_SOCKET); | 710 DCHECK_NE(socket_, INVALID_SOCKET); |
711 DCHECK(!waiting_read_); | 711 DCHECK(!waiting_read_); |
712 DCHECK(!old_read_callback_); | 712 DCHECK(!old_read_callback_); |
csilv
2011/12/07 00:03:48
change to match line 753
James Hawkins
2011/12/07 00:19:37
Done.
| |
713 DCHECK(!core_->read_iobuffer_); | 713 DCHECK(!core_->read_iobuffer_); |
714 | 714 |
715 buf_len = core_->ThrottleReadSize(buf_len); | 715 buf_len = core_->ThrottleReadSize(buf_len); |
716 | 716 |
717 core_->read_buffer_.len = buf_len; | 717 core_->read_buffer_.len = buf_len; |
718 core_->read_buffer_.buf = buf->data(); | 718 core_->read_buffer_.buf = buf->data(); |
719 | 719 |
720 // TODO(wtc): Remove the assertion after enough testing. | 720 // TODO(wtc): Remove the assertion after enough testing. |
721 AssertEventNotSignaled(core_->read_overlapped_.hEvent); | 721 AssertEventNotSignaled(core_->read_overlapped_.hEvent); |
722 DWORD num, flags = 0; | 722 DWORD num, flags = 0; |
(...skipping 14 matching lines...) Expand all 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 old_read_callback_ = callback; | |
csilv
2011/12/07 00:03:48
read_callback_ = callback;
James Hawkins
2011/12/07 00:19:37
Done.
| |
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 |