#pragma once #include #include "types.hpp" #include "utils.hpp" struct addrinfo; namespace sibs { class InvalidAddressException : public std::runtime_error { public: InvalidAddressException(const std::string &errMsg) : std::runtime_error(errMsg) {} }; class ConnectionException : public std::runtime_error { public: ConnectionException(const std::string &errMsg) : std::runtime_error(errMsg) {} }; class Ipv4 { DISABLE_COPY(Ipv4) public: // Throws InvalidAddressException on error Ipv4(const char *ip, u16 port); ~Ipv4(); struct addrinfo *address; }; class DirectConnections { DISABLE_COPY(DirectConnections) public: DirectConnections(); ~DirectConnections(); void connect(const Ipv4 &address); private: void init(); void cleanup(); private: int eid; int mySocket; }; }