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