Index: net/tools/quic/quic_server.cc |
diff --git a/net/tools/quic/quic_server.cc b/net/tools/quic/quic_server.cc |
index 0e1f8db6e6e27803a3148ebca345174362beec9d..ef3ae4f96112a10b99126a5959efc1345d9f19ed 100644 |
--- a/net/tools/quic/quic_server.cc |
+++ b/net/tools/quic/quic_server.cc |
@@ -22,9 +22,15 @@ |
#include "net/quic/quic_protocol.h" |
#include "net/tools/quic/quic_dispatcher.h" |
#include "net/tools/quic/quic_in_memory_cache.h" |
+#include "net/tools/quic/quic_packet_reader.h" |
#include "net/tools/quic/quic_socket_utils.h" |
+// TODO(rtenneti): Add support for MMSG_MORE. |
#define MMSG_MORE 0 |
+// If true, QuicListener uses the QuicPacketReader to read packets instead of |
+// QuicServer. |
+// TODO(rtenneti): Enable this flag after MMSG_MORE is set to 1. |
+#define FLAGS_quic_use_optimized_packet_reader false |
#ifndef SO_RXQ_OVFL |
#define SO_RXQ_OVFL 40 |
@@ -47,7 +53,8 @@ QuicServer::QuicServer() |
overflow_supported_(false), |
use_recvmmsg_(false), |
crypto_config_(kSourceAddressTokenSecret, QuicRandom::GetInstance()), |
- supported_versions_(QuicSupportedVersions()) { |
+ supported_versions_(QuicSupportedVersions()), |
+ packet_reader_(new QuicPacketReader()) { |
Initialize(); |
} |
@@ -60,7 +67,8 @@ QuicServer::QuicServer(const QuicConfig& config, |
use_recvmmsg_(false), |
config_(config), |
crypto_config_(kSourceAddressTokenSecret, QuicRandom::GetInstance()), |
- supported_versions_(supported_versions) { |
+ supported_versions_(supported_versions), |
+ packet_reader_(new QuicPacketReader()) { |
Initialize(); |
} |
@@ -201,9 +209,34 @@ void QuicServer::OnEvent(int fd, EpollEvent* event) { |
DVLOG(1) << "NET_POLLIN"; |
bool read = true; |
while (read) { |
- read = ReadAndDispatchSinglePacket( |
- fd_, port_, dispatcher_.get(), |
- overflow_supported_ ? &packets_dropped_ : nullptr); |
+ if (use_recvmmsg_) { |
+ if (FLAGS_quic_use_optimized_packet_reader) { |
+ read = packet_reader_->ReadAndDispatchPackets( |
+ fd_, port_, dispatcher_.get(), |
+ overflow_supported_ ? &packets_dropped_ : nullptr); |
+ } else { |
+// TODO(rtenneti): Add support for ReadAndDispatchPackets. |
+#if 0 |
+ read = ReadAndDispatchPackets( |
+ fd_, port_, dispatcher_.get(), |
+ overflow_supported_ ? &packets_dropped_ : nullptr); |
+#else |
+ read = ReadAndDispatchSinglePacket( |
+ fd_, port_, dispatcher_.get(), |
+ overflow_supported_ ? &packets_dropped_ : nullptr); |
+#endif |
+ } |
+ } else { |
+ if (FLAGS_quic_use_optimized_packet_reader) { |
+ read = QuicPacketReader::ReadAndDispatchSinglePacket( |
+ fd_, port_, dispatcher_.get(), |
+ overflow_supported_ ? &packets_dropped_ : nullptr); |
+ } else { |
+ read = ReadAndDispatchSinglePacket( |
+ fd_, port_, dispatcher_.get(), |
+ overflow_supported_ ? &packets_dropped_ : nullptr); |
+ } |
+ } |
} |
} |
if (event->in_events & NET_POLLOUT) { |