Index: net/tools/quic/quic_server.cc |
diff --git a/net/tools/quic/quic_server.cc b/net/tools/quic/quic_server.cc |
index 11eba67ef3877b627c168e8cf3abb35eb25a6f3a..dadb49b381b3a7c35410e24581e0c65b0ee0d8fe 100644 |
--- a/net/tools/quic/quic_server.cc |
+++ b/net/tools/quic/quic_server.cc |
@@ -48,6 +48,8 @@ const char kSourceAddressTokenSecret[] = "secret"; |
} // namespace |
+const size_t kNumSessionsToCreatePerSocketEvent = 16; |
+ |
QuicServer::QuicServer(std::unique_ptr<ProofSource> proof_source) |
: QuicServer(std::move(proof_source), |
QuicConfig(), |
@@ -177,6 +179,12 @@ void QuicServer::OnEvent(int fd, EpollEvent* event) { |
if (event->in_events & EPOLLIN) { |
DVLOG(1) << "EPOLLIN"; |
+ |
+ if (FLAGS_quic_limit_num_new_sessions_per_epoll_loop && |
+ FLAGS_quic_buffer_packet_till_chlo) { |
+ dispatcher_->ProcessBufferedChlos(kNumSessionsToCreatePerSocketEvent); |
+ } |
+ |
bool more_to_read = true; |
while (more_to_read) { |
more_to_read = packet_reader_->ReadAndDispatchPackets( |
@@ -184,6 +192,12 @@ void QuicServer::OnEvent(int fd, EpollEvent* event) { |
QuicEpollClock(&epoll_server_), dispatcher_.get(), |
overflow_supported_ ? &packets_dropped_ : nullptr); |
} |
+ |
+ if (FLAGS_quic_limit_num_new_sessions_per_epoll_loop && |
+ FLAGS_quic_buffer_packet_till_chlo && dispatcher_->HasChlosBuffered()) { |
+ // Register EPOLLIN event to consume buffered CHLO(s). |
+ event->out_ready_mask |= EPOLLIN; |
+ } |
} |
if (event->in_events & EPOLLOUT) { |
dispatcher_->OnCanWrite(); |