Program Listing for File SendSocketZeroCopy.hpp

Return to documentation for file (BackendLibfabric/SendSocketZeroCopy.hpp)

#ifndef NETIO3BACKEND_BACKENDLIBFABRIC_SENDSOCKETZEROCOPY_HPP
#define NETIO3BACKEND_BACKENDLIBFABRIC_SENDSOCKETZEROCOPY_HPP

#include <tbb/concurrent_queue.h>

#include "Buffer.hpp"
#include "SendSocket.hpp"
#include "DomainManager.hpp"
#include "Helpers.hpp"
#include "netio3-backend/Netio3Backend.hpp"

namespace netio3::libfabric {
  class SendSocketZeroCopy : public SendSocket
  {
  public:
    SendSocketZeroCopy(EndPointAddress address,
                       const ConnectionParameters& connection_params,
                       NetworkMode mode,
                       fid_fabric* fabric,
                       DomainContext& domain);

    SendSocketZeroCopy(const SendSocketZeroCopy&) = delete;
    SendSocketZeroCopy(SendSocketZeroCopy&&) = delete;
    SendSocketZeroCopy& operator=(const SendSocketZeroCopy&) = delete;
    SendSocketZeroCopy& operator=(SendSocketZeroCopy&&) = delete;

    ~SendSocketZeroCopy();

    [[nodiscard]] auto operator<=>(const SendSocketZeroCopy& other) const
    {
      return get_endpoint().cqfd <=> other.get_endpoint().cqfd;
    }

    [[nodiscard]] NetioStatus send_data(std::span<std::uint8_t> data,
                                        std::span<const std::uint8_t> header_data,
                                        std::uint64_t key);

    [[nodiscard]] NetioStatus send_data(std::span<const iovec> iov,
                                        std::span<const std::uint8_t> header_data,
                                        std::uint64_t key);

    [[nodiscard]] std::uint64_t release_buffer(std::uint64_t bufnum);

    [[nodiscard]] std::size_t get_num_available_buffers();

    [[nodiscard]] std::vector<std::uint64_t> get_pending_sends();

  private:
    void init_buffers(DomainContext& domain);

    EndPointAddress m_addr;
    ConnectionParameters m_conn_parameters{};
    Buffer m_mr;
    HeaderBuffer m_header_buffer;
  };
}  // namespace netio3::libfabric

#endif  // NETIO3BACKEND_BACKENDLIBFABRIC_SENDSOCKETZEROCOPY_HPP