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

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

Issue 7255002: Revert 90373 - Warmth of a connection (cwnd) is estimated by the amount of data written to the so... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 6 months 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')
Property Changes:
Added: svn:mergeinfo
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 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 bound_socket_(INVALID_SOCKET), 316 bound_socket_(INVALID_SOCKET),
317 addresses_(addresses), 317 addresses_(addresses),
318 current_ai_(NULL), 318 current_ai_(NULL),
319 waiting_read_(false), 319 waiting_read_(false),
320 waiting_write_(false), 320 waiting_write_(false),
321 read_callback_(NULL), 321 read_callback_(NULL),
322 write_callback_(NULL), 322 write_callback_(NULL),
323 next_connect_state_(CONNECT_STATE_NONE), 323 next_connect_state_(CONNECT_STATE_NONE),
324 connect_os_error_(0), 324 connect_os_error_(0),
325 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)), 325 net_log_(BoundNetLog::Make(net_log, NetLog::SOURCE_SOCKET)),
326 previously_disconnected_(false), 326 previously_disconnected_(false) {
327 num_bytes_read_(0) {
328 scoped_refptr<NetLog::EventParameters> params; 327 scoped_refptr<NetLog::EventParameters> params;
329 if (source.is_valid()) 328 if (source.is_valid())
330 params = new NetLogSourceParameter("source_dependency", source); 329 params = new NetLogSourceParameter("source_dependency", source);
331 net_log_.BeginEvent(NetLog::TYPE_SOCKET_ALIVE, params); 330 net_log_.BeginEvent(NetLog::TYPE_SOCKET_ALIVE, params);
332 EnsureWinsockInit(); 331 EnsureWinsockInit();
333 } 332 }
334 333
335 TCPClientSocketWin::~TCPClientSocketWin() { 334 TCPClientSocketWin::~TCPClientSocketWin() {
336 Disconnect(); 335 Disconnect();
337 net_log_.EndEvent(NetLog::TYPE_SOCKET_ALIVE, NULL); 336 net_log_.EndEvent(NetLog::TYPE_SOCKET_ALIVE, NULL);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 core_ = new Core(this); 477 core_ = new Core(this);
479 478
480 // WSACreateEvent creates a manual-reset event object. 479 // WSACreateEvent creates a manual-reset event object.
481 core_->read_overlapped_.hEvent = WSACreateEvent(); 480 core_->read_overlapped_.hEvent = WSACreateEvent();
482 // WSAEventSelect sets the socket to non-blocking mode as a side effect. 481 // WSAEventSelect sets the socket to non-blocking mode as a side effect.
483 // Our connect() and recv() calls require that the socket be non-blocking. 482 // Our connect() and recv() calls require that the socket be non-blocking.
484 WSAEventSelect(socket_, core_->read_overlapped_.hEvent, FD_CONNECT); 483 WSAEventSelect(socket_, core_->read_overlapped_.hEvent, FD_CONNECT);
485 484
486 core_->write_overlapped_.hEvent = WSACreateEvent(); 485 core_->write_overlapped_.hEvent = WSACreateEvent();
487 486
488 connect_start_time_ = base::TimeTicks::Now();
489 if (!connect(socket_, ai->ai_addr, static_cast<int>(ai->ai_addrlen))) { 487 if (!connect(socket_, ai->ai_addr, static_cast<int>(ai->ai_addrlen))) {
490 // Connected without waiting! 488 // Connected without waiting!
491 // 489 //
492 // The MSDN page for connect says: 490 // The MSDN page for connect says:
493 // With a nonblocking socket, the connection attempt cannot be completed 491 // With a nonblocking socket, the connection attempt cannot be completed
494 // immediately. In this case, connect will return SOCKET_ERROR, and 492 // immediately. In this case, connect will return SOCKET_ERROR, and
495 // WSAGetLastError will return WSAEWOULDBLOCK. 493 // WSAGetLastError will return WSAEWOULDBLOCK.
496 // which implies that for a nonblocking socket, connect never returns 0. 494 // which implies that for a nonblocking socket, connect never returns 0.
497 // It's not documented whether the event object will be signaled or not 495 // It's not documented whether the event object will be signaled or not
498 // if connect does return 0. So the code below is essentially dead code 496 // if connect does return 0. So the code below is essentially dead code
(...skipping 18 matching lines...) Expand all
517 int TCPClientSocketWin::DoConnectComplete(int result) { 515 int TCPClientSocketWin::DoConnectComplete(int result) {
518 // Log the end of this attempt (and any OS error it threw). 516 // Log the end of this attempt (and any OS error it threw).
519 int os_error = connect_os_error_; 517 int os_error = connect_os_error_;
520 connect_os_error_ = 0; 518 connect_os_error_ = 0;
521 scoped_refptr<NetLog::EventParameters> params; 519 scoped_refptr<NetLog::EventParameters> params;
522 if (result != OK) 520 if (result != OK)
523 params = new NetLogIntegerParameter("os_error", os_error); 521 params = new NetLogIntegerParameter("os_error", os_error);
524 net_log_.EndEvent(NetLog::TYPE_TCP_CONNECT_ATTEMPT, params); 522 net_log_.EndEvent(NetLog::TYPE_TCP_CONNECT_ATTEMPT, params);
525 523
526 if (result == OK) { 524 if (result == OK) {
527 connect_time_micros_ = base::TimeTicks::Now() - connect_start_time_;
528 use_history_.set_was_ever_connected(); 525 use_history_.set_was_ever_connected();
529 return OK; // Done! 526 return OK; // Done!
530 } 527 }
531 528
532 // Close whatever partially connected socket we currently have. 529 // Close whatever partially connected socket we currently have.
533 DoDisconnect(); 530 DoDisconnect();
534 531
535 // Try to fall back to the next address in the list. 532 // Try to fall back to the next address in the list.
536 if (current_ai_->ai_next) { 533 if (current_ai_->ai_next) {
537 next_connect_state_ = CONNECT_STATE_CONNECT; 534 next_connect_state_ = CONNECT_STATE_CONNECT;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 651
655 bool TCPClientSocketWin::WasEverUsed() const { 652 bool TCPClientSocketWin::WasEverUsed() const {
656 return use_history_.was_used_to_convey_data(); 653 return use_history_.was_used_to_convey_data();
657 } 654 }
658 655
659 bool TCPClientSocketWin::UsingTCPFastOpen() const { 656 bool TCPClientSocketWin::UsingTCPFastOpen() const {
660 // Not supported on windows. 657 // Not supported on windows.
661 return false; 658 return false;
662 } 659 }
663 660
664 int64 TCPClientSocketWin::NumBytesRead() const {
665 return num_bytes_read_;
666 }
667
668 base::TimeDelta TCPClientSocketWin::GetConnectTimeMicros() const {
669 return connect_time_micros_;
670 }
671
672 int TCPClientSocketWin::Read(IOBuffer* buf, 661 int TCPClientSocketWin::Read(IOBuffer* buf,
673 int buf_len, 662 int buf_len,
674 CompletionCallback* callback) { 663 CompletionCallback* callback) {
675 DCHECK(CalledOnValidThread()); 664 DCHECK(CalledOnValidThread());
676 DCHECK_NE(socket_, INVALID_SOCKET); 665 DCHECK_NE(socket_, INVALID_SOCKET);
677 DCHECK(!waiting_read_); 666 DCHECK(!waiting_read_);
678 DCHECK(!read_callback_); 667 DCHECK(!read_callback_);
679 DCHECK(!core_->read_iobuffer_); 668 DCHECK(!core_->read_iobuffer_);
680 669
681 buf_len = core_->ThrottleReadSize(buf_len); 670 buf_len = core_->ThrottleReadSize(buf_len);
(...skipping 10 matching lines...) Expand all
692 if (ResetEventIfSignaled(core_->read_overlapped_.hEvent)) { 681 if (ResetEventIfSignaled(core_->read_overlapped_.hEvent)) {
693 // Because of how WSARecv fills memory when used asynchronously, Purify 682 // Because of how WSARecv fills memory when used asynchronously, Purify
694 // isn't able to detect that it's been initialized, so it scans for 0xcd 683 // isn't able to detect that it's been initialized, so it scans for 0xcd
695 // in the buffer and reports UMRs (uninitialized memory reads) for those 684 // in the buffer and reports UMRs (uninitialized memory reads) for those
696 // individual bytes. We override that in PURIFY builds to avoid the 685 // individual bytes. We override that in PURIFY builds to avoid the
697 // false error reports. 686 // false error reports.
698 // See bug 5297. 687 // See bug 5297.
699 base::MemoryDebug::MarkAsInitialized(core_->read_buffer_.buf, num); 688 base::MemoryDebug::MarkAsInitialized(core_->read_buffer_.buf, num);
700 base::StatsCounter read_bytes("tcp.read_bytes"); 689 base::StatsCounter read_bytes("tcp.read_bytes");
701 read_bytes.Add(num); 690 read_bytes.Add(num);
702 num_bytes_read_ += num;
703 if (num > 0) 691 if (num > 0)
704 use_history_.set_was_used_to_convey_data(); 692 use_history_.set_was_used_to_convey_data();
705 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, num, 693 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, num,
706 core_->read_buffer_.buf); 694 core_->read_buffer_.buf);
707 return static_cast<int>(num); 695 return static_cast<int>(num);
708 } 696 }
709 } else { 697 } else {
710 int os_error = WSAGetLastError(); 698 int os_error = WSAGetLastError();
711 if (os_error != WSA_IO_PENDING) 699 if (os_error != WSA_IO_PENDING)
712 return MapSystemError(os_error); 700 return MapSystemError(os_error);
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 DCHECK(waiting_read_); 851 DCHECK(waiting_read_);
864 DWORD num_bytes, flags; 852 DWORD num_bytes, flags;
865 BOOL ok = WSAGetOverlappedResult(socket_, &core_->read_overlapped_, 853 BOOL ok = WSAGetOverlappedResult(socket_, &core_->read_overlapped_,
866 &num_bytes, FALSE, &flags); 854 &num_bytes, FALSE, &flags);
867 WSAResetEvent(core_->read_overlapped_.hEvent); 855 WSAResetEvent(core_->read_overlapped_.hEvent);
868 waiting_read_ = false; 856 waiting_read_ = false;
869 core_->read_iobuffer_ = NULL; 857 core_->read_iobuffer_ = NULL;
870 if (ok) { 858 if (ok) {
871 base::StatsCounter read_bytes("tcp.read_bytes"); 859 base::StatsCounter read_bytes("tcp.read_bytes");
872 read_bytes.Add(num_bytes); 860 read_bytes.Add(num_bytes);
873 num_bytes_read_ += num_bytes;
874 if (num_bytes > 0) 861 if (num_bytes > 0)
875 use_history_.set_was_used_to_convey_data(); 862 use_history_.set_was_used_to_convey_data();
876 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED, 863 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_RECEIVED,
877 num_bytes, core_->read_buffer_.buf); 864 num_bytes, core_->read_buffer_.buf);
878 } 865 }
879 DoReadCallback(ok ? num_bytes : MapSystemError(WSAGetLastError())); 866 DoReadCallback(ok ? num_bytes : MapSystemError(WSAGetLastError()));
880 } 867 }
881 868
882 void TCPClientSocketWin::DidCompleteWrite() { 869 void TCPClientSocketWin::DidCompleteWrite() {
883 DCHECK(waiting_write_); 870 DCHECK(waiting_write_);
(...skipping 22 matching lines...) Expand all
906 use_history_.set_was_used_to_convey_data(); 893 use_history_.set_was_used_to_convey_data();
907 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, num_bytes, 894 net_log_.AddByteTransferEvent(NetLog::TYPE_SOCKET_BYTES_SENT, num_bytes,
908 core_->write_buffer_.buf); 895 core_->write_buffer_.buf);
909 } 896 }
910 } 897 }
911 core_->write_iobuffer_ = NULL; 898 core_->write_iobuffer_ = NULL;
912 DoWriteCallback(rv); 899 DoWriteCallback(rv);
913 } 900 }
914 901
915 } // namespace net 902 } // 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