// SPDX-License-Identifier: MIT #pragma once #include #include #include #include #include namespace FEX::Utils { class NetStream final { public: NetStream(); void OpenSocket(int _socketfd) { socketfd = _socketfd; } void InvalidateSocket() { socketfd = -1; } bool HasSocket() const { return socketfd != -1; } struct ReturnGet final : public std::variant { bool HasHangup() const { return std::holds_alternative(*this) && std::get(*this); } bool HasData() const { return std::holds_alternative(*this); } char GetData() const { return std::get(*this); } }; ReturnGet get(); size_t read(char* buf, size_t size, bool ContinueOnInterrupt); void InterruptReader(); bool SendPacket(const fextl::string& packet); private: int socketfd {-1}; int eventfd {-1}; size_t read_offset {}; size_t receive_offset {}; fextl::vector receive_buffer; }; } // namespace FEX::Utils