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

Side by Side Diff: net/tools/quic/quic_client.cc

Issue 1810103002: Always use recvmmsg or recvmsg if it's available, and consolidate ReadAndDispatchPackets and ReadAn… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@116987771
Patch Set: Created 4 years, 9 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/tools/quic/quic_client.h ('k') | net/tools/quic/quic_packet_reader.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/tools/quic/quic_client.h" 5 #include "net/tools/quic/quic_client.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <netinet/in.h> 8 #include <netinet/in.h>
9 #include <string.h> 9 #include <string.h>
10 #include <sys/epoll.h> 10 #include <sys/epoll.h>
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 supported_versions, 67 supported_versions,
68 config, 68 config,
69 new QuicEpollConnectionHelper(epoll_server), 69 new QuicEpollConnectionHelper(epoll_server),
70 proof_verifier), 70 proof_verifier),
71 server_address_(server_address), 71 server_address_(server_address),
72 local_port_(0), 72 local_port_(0),
73 epoll_server_(epoll_server), 73 epoll_server_(epoll_server),
74 initialized_(false), 74 initialized_(false),
75 packets_dropped_(0), 75 packets_dropped_(0),
76 overflow_supported_(false), 76 overflow_supported_(false),
77 use_recvmmsg_(false),
78 store_response_(false), 77 store_response_(false),
79 latest_response_code_(-1), 78 latest_response_code_(-1),
80 packet_reader_(new QuicPacketReader()) {} 79 packet_reader_(new QuicPacketReader()) {}
81 80
82 QuicClient::~QuicClient() { 81 QuicClient::~QuicClient() {
83 if (connected()) { 82 if (connected()) {
84 session()->connection()->SendConnectionCloseWithDetails( 83 session()->connection()->SendConnectionCloseWithDetails(
85 QUIC_PEER_GOING_AWAY, "Client being torn down"); 84 QUIC_PEER_GOING_AWAY, "Client being torn down");
86 } 85 }
87 86
88 STLDeleteElements(&data_to_resend_on_connect_); 87 STLDeleteElements(&data_to_resend_on_connect_);
89 STLDeleteElements(&data_sent_before_handshake_); 88 STLDeleteElements(&data_sent_before_handshake_);
90 89
91 CleanUpAllUDPSockets(); 90 CleanUpAllUDPSockets();
92 } 91 }
93 92
94 bool QuicClient::Initialize() { 93 bool QuicClient::Initialize() {
95 QuicClientBase::Initialize(); 94 QuicClientBase::Initialize();
96 95
97 #if MMSG_MORE
98 use_recvmmsg_ = true;
99 #endif
100
101 set_num_sent_client_hellos(0); 96 set_num_sent_client_hellos(0);
102 set_num_stateless_rejects_received(0); 97 set_num_stateless_rejects_received(0);
103 set_connection_error(QUIC_NO_ERROR); 98 set_connection_error(QUIC_NO_ERROR);
104 99
105 // If an initial flow control window has not explicitly been set, then use the 100 // If an initial flow control window has not explicitly been set, then use the
106 // same values that Chrome uses. 101 // same values that Chrome uses.
107 const uint32_t kSessionMaxRecvWindowSize = 15 * 1024 * 1024; // 15 MB 102 const uint32_t kSessionMaxRecvWindowSize = 15 * 1024 * 1024; // 15 MB
108 const uint32_t kStreamMaxRecvWindowSize = 6 * 1024 * 1024; // 6 MB 103 const uint32_t kStreamMaxRecvWindowSize = 6 * 1024 * 1024; // 6 MB
109 if (config()->GetInitialStreamFlowControlWindowToSend() == 104 if (config()->GetInitialStreamFlowControlWindowToSend() ==
110 kMinimumFlowControlSendWindow) { 105 kMinimumFlowControlSendWindow) {
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 384
390 return true; 385 return true;
391 } 386 }
392 387
393 void QuicClient::OnEvent(int fd, EpollEvent* event) { 388 void QuicClient::OnEvent(int fd, EpollEvent* event) {
394 DCHECK_EQ(fd, GetLatestFD()); 389 DCHECK_EQ(fd, GetLatestFD());
395 390
396 if (event->in_events & EPOLLIN) { 391 if (event->in_events & EPOLLIN) {
397 bool more_to_read = true; 392 bool more_to_read = true;
398 while (connected() && more_to_read) { 393 while (connected() && more_to_read) {
399 if (use_recvmmsg_) { 394 more_to_read = packet_reader_->ReadAndDispatchPackets(
400 more_to_read = packet_reader_->ReadAndDispatchPackets( 395 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this,
401 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, 396 overflow_supported_ ? &packets_dropped_ : nullptr);
402 overflow_supported_ ? &packets_dropped_ : nullptr);
403 } else {
404 more_to_read = QuicPacketReader::ReadAndDispatchSinglePacket(
405 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this,
406 overflow_supported_ ? &packets_dropped_ : nullptr);
407 }
408 } 397 }
409 } 398 }
410 if (connected() && (event->in_events & EPOLLOUT)) { 399 if (connected() && (event->in_events & EPOLLOUT)) {
411 writer()->SetWritable(); 400 writer()->SetWritable();
412 session()->connection()->OnCanWrite(); 401 session()->connection()->OnCanWrite();
413 } 402 }
414 if (event->in_events & EPOLLERR) { 403 if (event->in_events & EPOLLERR) {
415 DVLOG(1) << "Epollerr"; 404 DVLOG(1) << "Epollerr";
416 } 405 }
417 } 406 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 return fd_address_map_.back().first; 485 return fd_address_map_.back().first;
497 } 486 }
498 487
499 void QuicClient::ProcessPacket(const IPEndPoint& self_address, 488 void QuicClient::ProcessPacket(const IPEndPoint& self_address,
500 const IPEndPoint& peer_address, 489 const IPEndPoint& peer_address,
501 const QuicEncryptedPacket& packet) { 490 const QuicEncryptedPacket& packet) {
502 session()->connection()->ProcessUdpPacket(self_address, peer_address, packet); 491 session()->connection()->ProcessUdpPacket(self_address, peer_address, packet);
503 } 492 }
504 493
505 } // namespace net 494 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/quic_client.h ('k') | net/tools/quic/quic_packet_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698