Luna/kernel/src/net/UnixSocket.h

49 lines
1009 B
C
Raw Normal View History

#pragma once
#include "net/Socket.h"
#include <luna/Buffer.h>
#include <luna/String.h>
#include <sys/un.h>
class UnixSocket : public Socket
{
public:
UnixSocket();
UnixSocket(UnixSocket* peer);
bool blocking() const override
{
return !m_data.size();
}
Result<usize> send(const u8*, usize, int) override;
Result<usize> recv(u8*, usize, int) const override;
Result<void> bind(SharedPtr<Socket>, struct sockaddr*, socklen_t) override;
Result<void> connect(struct sockaddr*, socklen_t) override;
void did_close() 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);
};