1 #ifndef LIBJMMCG_CORE_SOCKET_WRAPPER_GLIBC_HPP
2 #define LIBJMMCG_CORE_SOCKET_WRAPPER_GLIBC_HPP
28 #include <arpa/inet.h>
29 #include <sys/types.h>
30 #include <sys/socket.h>
48 using write_lock_t=LkT;
49 using atomic_t=
typename write_lock_t::atomic_t;
59 using socket_type=
int;
62 explicit wrapper(socket_type opened_skt)
noexcept(
false);
76 void write(MsgT
const &message)
noexcept(
true);
82 template<
class V,
std::size_t N>
83 void write(
std::array<V, N>
const &message)
noexcept(
true);
93 bool read(MsgT &dest)
noexcept(
true);
99 template<
class V,
std::size_t SrcSz>
bool
100 read(V (& dest)[SrcSz])
noexcept(
true);
105 template<
class MsgDetails,
class V,
std::size_t N>
bool
106 read(
std::array<V, N> &buff)
noexcept(
false);
108 void close()
noexcept(
true);
110 bool is_open()
const noexcept(
true);
117 void set_options(
std::size_t min_message_size,
std::size_t max_message_size,
unsigned short timeout, socket_priority priority,
std::size_t incoming_cpu)
noexcept(
false);
128 bool read_msg(
std::uint8_t *dest,
std::size_t msg_size)
noexcept(
true);
134 void ignore_sigpipe_for_a_socket_that_closes()
noexcept(
false);
138 inline std::ostream &
139 operator<<(
std::ostream &os,
wrapper<LkT>
const &ec)
noexcept(
false);
150 using domain_t=
typename base_t::domain_t;
151 using exception_t=
typename base_t::exception_t;
152 using type_t=
typename base_t::type_t;
153 using socket_type=
typename base_t::socket_type;
156 explicit wrapper(socket_type opened_skt)
noexcept(
false);
159 explicit wrapper(type_t type=type_t::stream, domain_t domain=domain_t::ip_v4)
noexcept(
false);
161 void connect(
char const *addr, uint16_t port)
noexcept(
false);
173 using domain_t=
typename base_t::domain_t;
174 using exception_t=
typename base_t::exception_t;
175 using socket_t=base_t;
176 using type_t=
typename base_t::type_t;
177 using socket_type=
typename base_t::socket_type;
178 using thread_traits=
typename base_t::thread_traits;
185 wrapper(
char const *addr, uint16_t port,
std::size_t min_message_size,
std::size_t max_message_size,
unsigned short timeout,
socket_priority priority,
std::size_t incoming_cpu, type_t type=type_t::stream, domain_t domain=domain_t::ip_v4)
noexcept(
false);
188 void run()
noexcept(
false);
189 void stop()
noexcept(
false);
190 bool stopped()
const noexcept(
true);
192 template<
class RecvProcMsgs>
void
195 void set_options(base_t &skt)
const noexcept(
false);
198 class recv_msg_ops_t;
200 std::atomic<
bool> exit_{
false};
201 std::atomic<
bool> exited_{
false};
202 std::exception_ptr ex=
nullptr;
204 std::shared_ptr<recv_msg_ops_t> recv_msg_ops{};