Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: net/socket/tcp_client_socket_win.cc

Issue 8801005: base::Bind: Convert Socket::Read. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket/tcp_client_socket_win.h ('k') | net/socket/transport_client_socket_pool_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « net/socket/tcp_client_socket_win.h ('k') | net/socket/transport_client_socket_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698