#pragma once #ifdef _WIN32 #include #include #else #ifdef __clang__ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wold-style-cast" #endif #include #include #include #include #include #include #include #include #include #include #include #ifdef __clang__ #pragma GCC diagnostic pop #endif #endif #include "lv2_socket.h" class lv2_socket_native final : public lv2_socket { public: lv2_socket_native(lv2_socket_family family, lv2_socket_type type, lv2_ip_protocol protocol); ~lv2_socket_native(); s32 create_socket(); std::tuple, sys_net_sockaddr> accept(bool is_lock = true) override; s32 bind(const sys_net_sockaddr& addr, s32 ps3_id) override; std::optional connect(const sys_net_sockaddr& addr) override; s32 connect_followup() override; std::pair getpeername() override; std::pair getsockname() override; std::tuple getsockopt(s32 level, s32 optname, u32 len) override; s32 setsockopt(s32 level, s32 optname, const std::vector& optval) override; std::optional, sys_net_sockaddr>> recvfrom(s32 flags, u32 len, bool is_lock = true) override; std::optional sendto(s32 flags, const std::vector& buf, std::optional opt_sn_addr, bool is_lock = true) override; s32 poll(sys_net_pollfd& sn_pfd, pollfd& native_pfd) override; std::tuple select(bs_t selected, pollfd& native_pfd) override; s32 listen(s32 backlog) override; void close() override; s32 shutdown(s32 how) override; private: void set_socket(socket_type socket, lv2_socket_family family, lv2_socket_type type, lv2_ip_protocol protocol); void set_default_buffers(); void set_non_blocking(); private: // Value keepers #ifdef _WIN32 s32 so_reuseaddr = 0; s32 so_reuseport = 0; #endif };