1 // Copyright (c) 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef QUICHE_QUIC_CORE_BATCH_WRITER_QUIC_SENDMMSG_BATCH_WRITER_H_ 6 #define QUICHE_QUIC_CORE_BATCH_WRITER_QUIC_SENDMMSG_BATCH_WRITER_H_ 7 8 #include "quiche/quic/core/batch_writer/quic_batch_writer_base.h" 9 #include "quiche/quic/core/quic_linux_socket_utils.h" 10 11 namespace quic { 12 13 class QUICHE_EXPORT QuicSendmmsgBatchWriter : public QuicUdpBatchWriter { 14 public: 15 QuicSendmmsgBatchWriter(std::unique_ptr<QuicBatchWriterBuffer> batch_buffer, 16 int fd); 17 18 CanBatchResult CanBatch(const char* buffer, size_t buf_len, 19 const QuicIpAddress& self_address, 20 const QuicSocketAddress& peer_address, 21 const PerPacketOptions* options, 22 const QuicPacketWriterParams& params, 23 uint64_t release_time) const override; 24 25 FlushImplResult FlushImpl() override; 26 27 protected: 28 using CmsgBuilder = QuicMMsgHdr::ControlBufferInitializer; 29 FlushImplResult InternalFlushImpl(size_t cmsg_space, 30 const CmsgBuilder& cmsg_builder); 31 }; 32 33 } // namespace quic 34 35 #endif // QUICHE_QUIC_CORE_BATCH_WRITER_QUIC_SENDMMSG_BATCH_WRITER_H_ 36