Chromium Code Reviews| Index: net/socket/tcp_client_socket_win.cc |
| =================================================================== |
| --- net/socket/tcp_client_socket_win.cc (revision 215603) |
| +++ net/socket/tcp_client_socket_win.cc (working copy) |
| @@ -182,16 +182,6 @@ |
| // The TCPClientSocketWin is going away. |
| void Detach() { socket_ = NULL; } |
| - // Throttle the read size based on our current slow start state. |
| - // Returns the throttled read size. |
| - int ThrottleReadSize(int size) { |
| - if (slow_start_throttle_ < kMaxSlowStartThrottle) { |
| - size = std::min(size, slow_start_throttle_); |
| - slow_start_throttle_ *= 2; |
| - } |
| - return size; |
| - } |
| - |
| // The separate OVERLAPPED variables for asynchronous operation. |
| // |read_overlapped_| is used for both Connect() and Read(). |
| // |write_overlapped_| is only used for Write(); |
| @@ -204,9 +194,6 @@ |
| int read_buffer_length_; |
| int write_buffer_length_; |
| - // Remember the state of g_disable_overlapped_reads for the duration of the |
| - // socket based on what it was when the socket was created. |
| - bool disable_overlapped_reads_; |
| bool non_blocking_reads_initialized_; |
| private: |
| @@ -251,13 +238,6 @@ |
| // |write_watcher_| watches for events from Write(); |
| base::win::ObjectWatcher write_watcher_; |
| - // When doing reads from the socket, we try to mirror TCP's slow start. |
| - // We do this because otherwise the async IO subsystem artifically delays |
| - // returning data to the application. |
| - static const int kInitialSlowStartThrottle = 1 * 1024; |
| - static const int kMaxSlowStartThrottle = 32 * kInitialSlowStartThrottle; |
| - int slow_start_throttle_; |
| - |
| DISALLOW_COPY_AND_ASSIGN(Core); |
| }; |
| @@ -265,12 +245,10 @@ |
| TCPClientSocketWin* socket) |
| : read_buffer_length_(0), |
| write_buffer_length_(0), |
| - disable_overlapped_reads_(g_disable_overlapped_reads), |
| non_blocking_reads_initialized_(false), |
| socket_(socket), |
| reader_(this), |
| - writer_(this), |
| - slow_start_throttle_(kInitialSlowStartThrottle) { |
| + writer_(this) { |
| memset(&read_overlapped_, 0, sizeof(read_overlapped_)); |
| memset(&write_overlapped_, 0, sizeof(write_overlapped_)); |
| @@ -307,13 +285,10 @@ |
| HANDLE object) { |
| DCHECK_EQ(object, core_->read_overlapped_.hEvent); |
| if (core_->socket_) { |
| - if (core_->socket_->waiting_connect()) { |
| + if (core_->socket_->waiting_connect()) |
| core_->socket_->DidCompleteConnect(); |
| - } else if (core_->disable_overlapped_reads_) { |
| + else |
| core_->socket_->DidSignalRead(); |
| - } else { |
| - core_->socket_->DidCompleteRead(); |
| - } |
| } |
| core_->Release(); |
| @@ -788,10 +763,6 @@ |
| return DisableNagle(socket_, no_delay); |
| } |
| -void TCPClientSocketWin::DisableOverlappedReads() { |
| - g_disable_overlapped_reads = true; |
| -} |
| - |
| void TCPClientSocketWin::LogConnectCompletion(int net_error) { |
| if (net_error == OK) |
| UpdateConnectionTypeHistograms(CONNECTION_ANY); |
| @@ -822,64 +793,29 @@ |
| int TCPClientSocketWin::DoRead(IOBuffer* buf, int buf_len, |
| const CompletionCallback& callback) { |
| - if (core_->disable_overlapped_reads_) { |
| - if (!core_->non_blocking_reads_initialized_) { |
| - WSAEventSelect(socket_, core_->read_overlapped_.hEvent, |
| - FD_READ | FD_CLOSE); |
| - core_->non_blocking_reads_initialized_ = true; |
| + if (!core_->non_blocking_reads_initialized_) { |
| + WSAEventSelect(socket_, core_->read_overlapped_.hEvent, |
| + FD_READ | FD_CLOSE); |
|
Ryan Sleevi
2013/08/06 19:43:38
nit: alignment
Pat Meenan
2013/08/07 13:54:17
Fixed
|
| + core_->non_blocking_reads_initialized_ = true; |
| + } |
| + int rv = recv(socket_, buf->data(), buf_len, 0); |
| + if (rv == SOCKET_ERROR) { |
| + int os_error = WSAGetLastError(); |
| + if (os_error != WSAEWOULDBLOCK) { |
| + int net_error = MapSystemError(os_error); |
| + net_log_.AddEvent(NetLog::TYPE_SOCKET_READ_ERROR, |
| + CreateNetLogSocketErrorCallback(net_error, os_error)); |
|
Ryan Sleevi
2013/08/06 19:43:38
nit: Style is wrong here, per http://google-styleg
Pat Meenan
2013/08/07 13:54:17
Fixed
|
| + return net_error; |
| } |
| - int rv = recv(socket_, buf->data(), buf_len, 0); |
| - if (rv == SOCKET_ERROR) { |
| - int os_error = WSAGetLastError(); |
| - if (os_error != WSAEWOULDBLOCK) { |
| - int net_error = MapSystemError(os_error); |
| - net_log_.AddEvent(NetLog::TYPE_SOCKET_READ_ERROR, |
| - CreateNetLogSocketErrorCallback(net_error, os_error)); |
| - return net_error; |
| - } |
| - } else { |
| - base::StatsCounter read_bytes("tcp.read_bytes"); |
| - if (rv > 0) { |
| - use_history_.set_was_used_to_convey_data(); |
| - read_bytes.Add(rv); |
| - } |
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, rv, |
| - buf->data()); |
| - return rv; |
| - } |
| } else { |
| - buf_len = core_->ThrottleReadSize(buf_len); |
| - |
| - WSABUF read_buffer; |
| - read_buffer.len = buf_len; |
| - read_buffer.buf = buf->data(); |
| - |
| - // TODO(wtc): Remove the assertion after enough testing. |
| - AssertEventNotSignaled(core_->read_overlapped_.hEvent); |
| - DWORD num; |
| - DWORD flags = 0; |
| - int rv = WSARecv(socket_, &read_buffer, 1, &num, &flags, |
| - &core_->read_overlapped_, NULL); |
| - if (rv == 0) { |
| - if (ResetEventIfSignaled(core_->read_overlapped_.hEvent)) { |
| - base::StatsCounter read_bytes("tcp.read_bytes"); |
| - if (num > 0) { |
| - use_history_.set_was_used_to_convey_data(); |
| - read_bytes.Add(num); |
| - } |
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, num, |
| - buf->data()); |
| - return static_cast<int>(num); |
| - } |
| - } else { |
| - int os_error = WSAGetLastError(); |
| - if (os_error != WSA_IO_PENDING) { |
| - int net_error = MapSystemError(os_error); |
| - net_log_.AddEvent(NetLog::TYPE_SOCKET_READ_ERROR, |
| - CreateNetLogSocketErrorCallback(net_error, os_error)); |
| - return net_error; |
| - } |
| + base::StatsCounter read_bytes("tcp.read_bytes"); |
| + if (rv > 0) { |
| + use_history_.set_was_used_to_convey_data(); |
| + read_bytes.Add(rv); |
| } |
| + net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, rv, |
| + buf->data()); |
| + return rv; |
| } |
| waiting_read_ = true; |
| @@ -904,7 +840,8 @@ |
| DCHECK_NE(rv, ERR_IO_PENDING); |
| DCHECK(!write_callback_.is_null()); |
| - // since Run may result in Write being called, clear write_callback_ up front. |
| + // Since Run may result in Write being called, |
|
rvargas (doing something else)
2013/08/06 21:43:31
nit: This should still fit in one line.
Pat Meenan
2013/08/07 13:54:17
Thanks. Looks like my guidelines in my editor are
|
| + // clear write_callback_ up front. |
| CompletionCallback c = write_callback_; |
| write_callback_.Reset(); |
| c.Run(rv); |
| @@ -938,33 +875,6 @@ |
| } |
| } |
| -void TCPClientSocketWin::DidCompleteRead() { |
| - DCHECK(waiting_read_); |
| - DWORD num_bytes, flags; |
| - BOOL ok = WSAGetOverlappedResult(socket_, &core_->read_overlapped_, |
| - &num_bytes, FALSE, &flags); |
| - waiting_read_ = false; |
| - int rv; |
| - if (ok) { |
| - base::StatsCounter read_bytes("tcp.read_bytes"); |
| - read_bytes.Add(num_bytes); |
| - if (num_bytes > 0) |
| - use_history_.set_was_used_to_convey_data(); |
| - net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, |
| - num_bytes, core_->read_iobuffer_->data()); |
| - rv = static_cast<int>(num_bytes); |
| - } else { |
| - int os_error = WSAGetLastError(); |
| - rv = MapSystemError(os_error); |
| - net_log_.AddEvent(NetLog::TYPE_SOCKET_READ_ERROR, |
| - CreateNetLogSocketErrorCallback(rv, os_error)); |
| - } |
| - WSAResetEvent(core_->read_overlapped_.hEvent); |
| - core_->read_iobuffer_ = NULL; |
| - core_->read_buffer_length_ = 0; |
| - DoReadCallback(rv); |
| -} |
| - |
| void TCPClientSocketWin::DidCompleteWrite() { |
| DCHECK(waiting_write_); |