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

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

Issue 903273002: Update from https://crrev.com/315085 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « net/socket/tcp_client_socket.cc ('k') | net/test/spawned_test_server/remote_test_server.h » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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_socket.h" 5 #include "net/socket/tcp_socket.h"
6 #include "net/socket/tcp_socket_win.h" 6 #include "net/socket/tcp_socket_win.h"
7 7
8 #include <mstcpip.h> 8 #include <mstcpip.h>
9 9
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 // We grab an extra reference because there is an IO operation in progress. 243 // We grab an extra reference because there is an IO operation in progress.
244 // Balanced in WriteDelegate::OnObjectSignaled(). 244 // Balanced in WriteDelegate::OnObjectSignaled().
245 AddRef(); 245 AddRef();
246 write_watcher_.StartWatching(write_overlapped_.hEvent, &writer_); 246 write_watcher_.StartWatching(write_overlapped_.hEvent, &writer_);
247 } 247 }
248 248
249 void TCPSocketWin::Core::ReadDelegate::OnObjectSignaled(HANDLE object) { 249 void TCPSocketWin::Core::ReadDelegate::OnObjectSignaled(HANDLE object) {
250 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 250 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
251 tracked_objects::ScopedTracker tracking_profile( 251 tracked_objects::ScopedTracker tracking_profile(
252 FROM_HERE_WITH_EXPLICIT_FUNCTION( 252 FROM_HERE_WITH_EXPLICIT_FUNCTION(
253 "TCPSocketWin_Core_ReadDelegate_OnObjectSignaled")); 253 "418183 TCPSocketWin::Core::ReadDelegate::OnObjectSignaled"));
254 254
255 DCHECK_EQ(object, core_->read_overlapped_.hEvent); 255 DCHECK_EQ(object, core_->read_overlapped_.hEvent);
256 if (core_->socket_) { 256 if (core_->socket_) {
257 if (core_->socket_->waiting_connect_) 257 if (core_->socket_->waiting_connect_)
258 core_->socket_->DidCompleteConnect(); 258 core_->socket_->DidCompleteConnect();
259 else 259 else
260 core_->socket_->DidSignalRead(); 260 core_->socket_->DidSignalRead();
261 } 261 }
262 262
263 core_->Release(); 263 core_->Release();
264 } 264 }
265 265
266 void TCPSocketWin::Core::WriteDelegate::OnObjectSignaled( 266 void TCPSocketWin::Core::WriteDelegate::OnObjectSignaled(
267 HANDLE object) { 267 HANDLE object) {
268 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 268 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
269 tracked_objects::ScopedTracker tracking_profile( 269 tracked_objects::ScopedTracker tracking_profile(
270 FROM_HERE_WITH_EXPLICIT_FUNCTION( 270 FROM_HERE_WITH_EXPLICIT_FUNCTION(
271 "TCPSocketWin_Core_WriteDelegate_OnObjectSignaled")); 271 "418183 TCPSocketWin::Core::WriteDelegate::OnObjectSignaled"));
272 272
273 DCHECK_EQ(object, core_->write_overlapped_.hEvent); 273 DCHECK_EQ(object, core_->write_overlapped_.hEvent);
274 if (core_->socket_) 274 if (core_->socket_)
275 core_->socket_->DidCompleteWrite(); 275 core_->socket_->DidCompleteWrite();
276 276
277 core_->Release(); 277 core_->Release();
278 } 278 }
279 279
280 //----------------------------------------------------------------------------- 280 //-----------------------------------------------------------------------------
281 281
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 *socket = tcp_socket.Pass(); 767 *socket = tcp_socket.Pass();
768 *address = ip_end_point; 768 *address = ip_end_point;
769 net_log_.EndEvent(NetLog::TYPE_TCP_ACCEPT, 769 net_log_.EndEvent(NetLog::TYPE_TCP_ACCEPT,
770 CreateNetLogIPEndPointCallback(&ip_end_point)); 770 CreateNetLogIPEndPointCallback(&ip_end_point));
771 return OK; 771 return OK;
772 } 772 }
773 773
774 void TCPSocketWin::OnObjectSignaled(HANDLE object) { 774 void TCPSocketWin::OnObjectSignaled(HANDLE object) {
775 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed. 775 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
776 tracked_objects::ScopedTracker tracking_profile( 776 tracked_objects::ScopedTracker tracking_profile(
777 FROM_HERE_WITH_EXPLICIT_FUNCTION("TCPSocketWin_OnObjectSignaled")); 777 FROM_HERE_WITH_EXPLICIT_FUNCTION(
778 "418383 TCPSocketWin::OnObjectSignaled"));
778 779
779 WSANETWORKEVENTS ev; 780 WSANETWORKEVENTS ev;
780 if (WSAEnumNetworkEvents(socket_, accept_event_, &ev) == SOCKET_ERROR) { 781 if (WSAEnumNetworkEvents(socket_, accept_event_, &ev) == SOCKET_ERROR) {
781 PLOG(ERROR) << "WSAEnumNetworkEvents()"; 782 PLOG(ERROR) << "WSAEnumNetworkEvents()";
782 return; 783 return;
783 } 784 }
784 785
785 if (ev.lNetworkEvents & FD_ACCEPT) { 786 if (ev.lNetworkEvents & FD_ACCEPT) {
786 int result = AcceptInternal(accept_socket_, accept_address_); 787 int result = AcceptInternal(accept_socket_, accept_address_);
787 if (result != ERR_IO_PENDING) { 788 if (result != ERR_IO_PENDING) {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 core_->read_buffer_length_ = buf_len; 957 core_->read_buffer_length_ = buf_len;
957 core_->WatchForRead(); 958 core_->WatchForRead();
958 return ERR_IO_PENDING; 959 return ERR_IO_PENDING;
959 } 960 }
960 961
961 void TCPSocketWin::DidCompleteConnect() { 962 void TCPSocketWin::DidCompleteConnect() {
962 DCHECK(waiting_connect_); 963 DCHECK(waiting_connect_);
963 DCHECK(!read_callback_.is_null()); 964 DCHECK(!read_callback_.is_null());
964 int result; 965 int result;
965 966
967 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
968 tracked_objects::ScopedTracker tracking_profile1(
969 FROM_HERE_WITH_EXPLICIT_FUNCTION(
970 "418183 TCPSocketWin::DidCompleteConnect1"));
966 WSANETWORKEVENTS events; 971 WSANETWORKEVENTS events;
967 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent, 972 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent,
968 &events); 973 &events);
969 int os_error = 0; 974 int os_error = 0;
970 if (rv == SOCKET_ERROR) { 975 if (rv == SOCKET_ERROR) {
971 NOTREACHED(); 976 NOTREACHED();
972 os_error = WSAGetLastError(); 977 os_error = WSAGetLastError();
973 result = MapSystemError(os_error); 978 result = MapSystemError(os_error);
974 } else if (events.lNetworkEvents & FD_CONNECT) { 979 } else if (events.lNetworkEvents & FD_CONNECT) {
980 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
981 // fixed.
982 tracked_objects::ScopedTracker tracking_profile2(
983 FROM_HERE_WITH_EXPLICIT_FUNCTION(
984 "418183 TCPSocketWin::DidCompleteConnect2"));
975 os_error = events.iErrorCode[FD_CONNECT_BIT]; 985 os_error = events.iErrorCode[FD_CONNECT_BIT];
976 result = MapConnectError(os_error); 986 result = MapConnectError(os_error);
977 } else { 987 } else {
978 NOTREACHED(); 988 NOTREACHED();
979 result = ERR_UNEXPECTED; 989 result = ERR_UNEXPECTED;
980 } 990 }
981 991
992 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
993 tracked_objects::ScopedTracker tracking_profile3(
994 FROM_HERE_WITH_EXPLICIT_FUNCTION(
995 "418183 TCPSocketWin::DidCompleteConnect3"));
982 connect_os_error_ = os_error; 996 connect_os_error_ = os_error;
983 DoConnectComplete(result); 997 DoConnectComplete(result);
984 waiting_connect_ = false; 998 waiting_connect_ = false;
985 999
1000 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
1001 tracked_objects::ScopedTracker tracking_profile4(
1002 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1003 "418183 TCPSocketWin::DidCompleteConnect4"));
986 DCHECK_NE(result, ERR_IO_PENDING); 1004 DCHECK_NE(result, ERR_IO_PENDING);
987 base::ResetAndReturn(&read_callback_).Run(result); 1005 base::ResetAndReturn(&read_callback_).Run(result);
988 } 1006 }
989 1007
990 void TCPSocketWin::DidCompleteWrite() { 1008 void TCPSocketWin::DidCompleteWrite() {
991 DCHECK(waiting_write_); 1009 DCHECK(waiting_write_);
992 DCHECK(!write_callback_.is_null()); 1010 DCHECK(!write_callback_.is_null());
993 1011
994 DWORD num_bytes, flags; 1012 DWORD num_bytes, flags;
995 BOOL ok = WSAGetOverlappedResult(socket_, &core_->write_overlapped_, 1013 BOOL ok = WSAGetOverlappedResult(socket_, &core_->write_overlapped_,
(...skipping 27 matching lines...) Expand all
1023 core_->write_iobuffer_ = NULL; 1041 core_->write_iobuffer_ = NULL;
1024 1042
1025 DCHECK_NE(rv, ERR_IO_PENDING); 1043 DCHECK_NE(rv, ERR_IO_PENDING);
1026 base::ResetAndReturn(&write_callback_).Run(rv); 1044 base::ResetAndReturn(&write_callback_).Run(rv);
1027 } 1045 }
1028 1046
1029 void TCPSocketWin::DidSignalRead() { 1047 void TCPSocketWin::DidSignalRead() {
1030 DCHECK(waiting_read_); 1048 DCHECK(waiting_read_);
1031 DCHECK(!read_callback_.is_null()); 1049 DCHECK(!read_callback_.is_null());
1032 1050
1051 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is fixed.
1052 tracked_objects::ScopedTracker tracking_profile1(
1053 FROM_HERE_WITH_EXPLICIT_FUNCTION("418183 TCPSocketWin::DidSignalRead1"));
1033 int os_error = 0; 1054 int os_error = 0;
1034 WSANETWORKEVENTS network_events; 1055 WSANETWORKEVENTS network_events;
1035 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent, 1056 int rv = WSAEnumNetworkEvents(socket_, core_->read_overlapped_.hEvent,
1036 &network_events); 1057 &network_events);
1037 if (rv == SOCKET_ERROR) { 1058 if (rv == SOCKET_ERROR) {
1038 os_error = WSAGetLastError(); 1059 os_error = WSAGetLastError();
1039 rv = MapSystemError(os_error); 1060 rv = MapSystemError(os_error);
1040 } else if (network_events.lNetworkEvents) { 1061 } else if (network_events.lNetworkEvents) {
1062 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
1063 // fixed.
1064 tracked_objects::ScopedTracker tracking_profile2(
1065 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1066 "418183 TCPSocketWin::DidSignalRead2"));
1041 DCHECK_EQ(network_events.lNetworkEvents & ~(FD_READ | FD_CLOSE), 0); 1067 DCHECK_EQ(network_events.lNetworkEvents & ~(FD_READ | FD_CLOSE), 0);
1042 // If network_events.lNetworkEvents is FD_CLOSE and 1068 // If network_events.lNetworkEvents is FD_CLOSE and
1043 // network_events.iErrorCode[FD_CLOSE_BIT] is 0, it is a graceful 1069 // network_events.iErrorCode[FD_CLOSE_BIT] is 0, it is a graceful
1044 // connection closure. It is tempting to directly set rv to 0 in 1070 // connection closure. It is tempting to directly set rv to 0 in
1045 // this case, but the MSDN pages for WSAEventSelect and 1071 // this case, but the MSDN pages for WSAEventSelect and
1046 // WSAAsyncSelect recommend we still call DoRead(): 1072 // WSAAsyncSelect recommend we still call DoRead():
1047 // FD_CLOSE should only be posted after all data is read from a 1073 // FD_CLOSE should only be posted after all data is read from a
1048 // socket, but an application should check for remaining data upon 1074 // socket, but an application should check for remaining data upon
1049 // receipt of FD_CLOSE to avoid any possibility of losing data. 1075 // receipt of FD_CLOSE to avoid any possibility of losing data.
1050 // 1076 //
1051 // If network_events.iErrorCode[FD_READ_BIT] or 1077 // If network_events.iErrorCode[FD_READ_BIT] or
1052 // network_events.iErrorCode[FD_CLOSE_BIT] is nonzero, still call 1078 // network_events.iErrorCode[FD_CLOSE_BIT] is nonzero, still call
1053 // DoRead() because recv() reports a more accurate error code 1079 // DoRead() because recv() reports a more accurate error code
1054 // (WSAECONNRESET vs. WSAECONNABORTED) when the connection was 1080 // (WSAECONNRESET vs. WSAECONNABORTED) when the connection was
1055 // reset. 1081 // reset.
1056 rv = DoRead(core_->read_iobuffer_.get(), core_->read_buffer_length_, 1082 rv = DoRead(core_->read_iobuffer_.get(), core_->read_buffer_length_,
1057 read_callback_); 1083 read_callback_);
1058 if (rv == ERR_IO_PENDING) 1084 if (rv == ERR_IO_PENDING)
1059 return; 1085 return;
1060 } else { 1086 } else {
1087 // TODO(pkasting): Remove ScopedTracker below once crbug.com/418183 is
1088 // fixed.
1089 tracked_objects::ScopedTracker tracking_profile3(
1090 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1091 "418183 TCPSocketWin::DidSignalRead3"));
1061 // This may happen because Read() may succeed synchronously and 1092 // This may happen because Read() may succeed synchronously and
1062 // consume all the received data without resetting the event object. 1093 // consume all the received data without resetting the event object.
1063 core_->WatchForRead(); 1094 core_->WatchForRead();
1064 return; 1095 return;
1065 } 1096 }
1066 1097
1067 waiting_read_ = false; 1098 waiting_read_ = false;
1068 core_->read_iobuffer_ = NULL; 1099 core_->read_iobuffer_ = NULL;
1069 core_->read_buffer_length_ = 0; 1100 core_->read_buffer_length_ = 0;
1070 1101
1102 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
1103 tracked_objects::ScopedTracker tracking_profile4(
1104 FROM_HERE_WITH_EXPLICIT_FUNCTION("418183 TCPSocketWin::DidSignalRead4"));
1071 DCHECK_NE(rv, ERR_IO_PENDING); 1105 DCHECK_NE(rv, ERR_IO_PENDING);
1072 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is fixed.
1073 tracked_objects::ScopedTracker tracking_profile(
1074 FROM_HERE_WITH_EXPLICIT_FUNCTION("TCPSocketWin::DidSignalRead"));
1075 base::ResetAndReturn(&read_callback_).Run(rv); 1106 base::ResetAndReturn(&read_callback_).Run(rv);
1076 } 1107 }
1077 1108
1078 } // namespace net 1109 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/tcp_client_socket.cc ('k') | net/test/spawned_test_server/remote_test_server.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698