#pragma once #include "net/Socket.h" #include #include #include class UnixSocket : public Socket { public: UnixSocket(); UnixSocket(UnixSocket* peer); bool blocking() const override { return !m_data.size(); } Result send(const u8*, usize, int) override; Result recv(u8*, usize, int) const override; Result bind(SharedPtr, struct sockaddr*, socklen_t) override; Result connect(struct sockaddr*, socklen_t) override; void connect_to_peer(UnixSocket* peer); virtual ~UnixSocket(); private: enum State { Inactive, Bound, Listening, Connecting, Connected, Reset, }; State m_state = State::Inactive; UnixSocket* m_peer; mutable Buffer m_data; struct sockaddr_un m_addr = { .sun_family = AF_UNIX, .sun_path = {} }; socklen_t m_addrlen = sizeof(sa_family_t); };