| 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();
|
|
|