sys_net: fix some warnings

move some data to heap
This commit is contained in:
Megamouse 2023-10-30 23:22:50 +01:00 committed by Elad Ashkenazi
parent b7fe35a2af
commit e26d4e1762
6 changed files with 28 additions and 25 deletions

View file

@ -351,7 +351,7 @@ error_code sys_net_bnet_accept(ppu_thread& ppu, s32 s, vm::ptr<sys_net_sockaddr>
const auto sock = idm::check<lv2_socket>(s, [&, notify = lv2_obj::notify_all_t()](lv2_socket& sock) const auto sock = idm::check<lv2_socket>(s, [&, notify = lv2_obj::notify_all_t()](lv2_socket& sock)
{ {
const auto [success, res, res_socket, res_addr] = sock.accept(); auto [success, res, res_socket, res_addr] = sock.accept();
if (success) if (success)
{ {
@ -713,7 +713,7 @@ error_code sys_net_bnet_getsockopt(ppu_thread& ppu, s32 s, s32 level, s32 optnam
return -SYS_NET_EINVAL; return -SYS_NET_EINVAL;
} }
const auto [res, out_val, out_len] = sock.getsockopt(level, optname, *optlen); const auto& [res, out_val, out_len] = sock.getsockopt(level, optname, *optlen);
if (res == CELL_OK) if (res == CELL_OK)
{ {
@ -1277,9 +1277,9 @@ error_code sys_net_bnet_poll(ppu_thread& ppu, vm::ptr<sys_net_pollfd> fds, s32 n
std::unique_lock nw_lock(g_fxo->get<network_context>().s_nw_mutex); std::unique_lock nw_lock(g_fxo->get<network_context>().s_nw_mutex);
std::shared_lock lock(id_manager::g_mutex); std::shared_lock lock(id_manager::g_mutex);
::pollfd _fds[1024]{}; std::vector<::pollfd> _fds(nfds);
#ifdef _WIN32 #ifdef _WIN32
bool connecting[1024]{}; std::vector<bool> connecting(nfds);
#endif #endif
for (s32 i = 0; i < nfds; i++) for (s32 i = 0; i < nfds; i++)
@ -1309,7 +1309,7 @@ error_code sys_net_bnet_poll(ppu_thread& ppu, vm::ptr<sys_net_pollfd> fds, s32 n
#ifdef _WIN32 #ifdef _WIN32
windows_poll(_fds, nfds, 0, connecting); windows_poll(_fds, nfds, 0, connecting);
#else #else
::poll(_fds, nfds, 0); ::poll(_fds.data(), nfds, 0);
#endif #endif
for (s32 i = 0; i < nfds; i++) for (s32 i = 0; i < nfds; i++)
{ {
@ -1330,7 +1330,7 @@ error_code sys_net_bnet_poll(ppu_thread& ppu, vm::ptr<sys_net_pollfd> fds, s32 n
{ {
lock.unlock(); lock.unlock();
nw_lock.unlock(); nw_lock.unlock();
std::memcpy(fds.get_ptr(), fds_buf.data(), nfds * sizeof(fds[0])); std::memcpy(fds.get_ptr(), fds_buf.data(), nfds * sizeof(sys_net_pollfd));
return not_an_error(signaled); return not_an_error(signaled);
} }
@ -1473,9 +1473,9 @@ error_code sys_net_bnet_select(ppu_thread& ppu, s32 nfds, vm::ptr<sys_net_fd_set
reader_lock lock(id_manager::g_mutex); reader_lock lock(id_manager::g_mutex);
::pollfd _fds[1024]{}; std::vector<::pollfd> _fds(nfds);
#ifdef _WIN32 #ifdef _WIN32
bool connecting[1024]{}; std::vector<bool> connecting(nfds);
#endif #endif
for (s32 i = 0; i < nfds; i++) for (s32 i = 0; i < nfds; i++)
@ -1536,7 +1536,7 @@ error_code sys_net_bnet_select(ppu_thread& ppu, s32 nfds, vm::ptr<sys_net_fd_set
#ifdef _WIN32 #ifdef _WIN32
windows_poll(_fds, nfds, 0, connecting); windows_poll(_fds, nfds, 0, connecting);
#else #else
::poll(_fds, nfds, 0); ::poll(_fds.data(), nfds, 0);
#endif #endif
for (s32 i = 0; i < nfds; i++) for (s32 i = 0; i < nfds; i++)
{ {

View file

@ -984,7 +984,7 @@ std::optional<s32> lv2_socket_native::sendto(s32 flags, const std::vector<u8>& b
} }
} }
native_result = ::sendto(socket, reinterpret_cast<const char*>(buf.data()), buf.size(), native_flags, native_addr ? reinterpret_cast<struct sockaddr*>(&(*native_addr)) : nullptr, native_addr ? sizeof(*native_addr) : 0); native_result = ::sendto(socket, reinterpret_cast<const char*>(buf.data()), buf.size(), native_flags, native_addr ? reinterpret_cast<struct sockaddr*>(&native_addr.value()) : nullptr, native_addr ? sizeof(sockaddr_in) : 0);
if (native_result >= 0) if (native_result >= 0)
{ {

View file

@ -273,7 +273,7 @@ std::optional<s32> lv2_socket_p2p::sendto(s32 flags, const std::vector<u8>& buf,
ensure(opt_sn_addr); ensure(opt_sn_addr);
ensure(socket); // ensures it has been bound ensure(socket); // ensures it has been bound
ensure(buf.size() <= (65535 - VPORT_P2P_HEADER_SIZE)); // catch games using full payload for future fragmentation implementation if necessary ensure(buf.size() <= static_cast<usz>(65535 - VPORT_P2P_HEADER_SIZE)); // catch games using full payload for future fragmentation implementation if necessary
const u16 p2p_port = reinterpret_cast<const sys_net_sockaddr_in*>(&*opt_sn_addr)->sin_port; const u16 p2p_port = reinterpret_cast<const sys_net_sockaddr_in*>(&*opt_sn_addr)->sin_port;
const u16 p2p_vport = reinterpret_cast<const sys_net_sockaddr_in_p2p*>(&*opt_sn_addr)->sin_vport; const u16 p2p_vport = reinterpret_cast<const sys_net_sockaddr_in_p2p*>(&*opt_sn_addr)->sin_vport;

View file

@ -96,27 +96,29 @@ void network_thread::operator()()
s_to_awake.clear(); s_to_awake.clear();
::pollfd fds[lv2_socket::id_count]{}; std::vector<::pollfd> fds(lv2_socket::id_count);
#ifdef _WIN32 #ifdef _WIN32
bool connecting[lv2_socket::id_count]{}; std::vector<bool> connecting(lv2_socket::id_count);
bool was_connecting[lv2_socket::id_count]{}; std::vector<bool> was_connecting(lv2_socket::id_count);
#endif #endif
::pollfd p2p_fd[lv2_socket::id_count]{}; std::vector<::pollfd> p2p_fd(lv2_socket::id_count);
while (thread_ctrl::state() != thread_state::aborting) while (thread_ctrl::state() != thread_state::aborting)
{ {
ensure(socklist.size() <= lv2_socket::id_count);
// Wait with 1ms timeout // Wait with 1ms timeout
#ifdef _WIN32 #ifdef _WIN32
windows_poll(fds, ::size32(socklist), 1, connecting); windows_poll(fds, socklist.size(), 1, connecting);
#else #else
::poll(fds, socklist.size(), 1); ::poll(fds.data(), socklist.size(), 1);
#endif #endif
// Check P2P sockets for incoming packets(timeout could probably be set at 0) // Check P2P sockets for incoming packets(timeout could probably be set at 0)
{ {
std::lock_guard lock(list_p2p_ports_mutex); std::lock_guard lock(list_p2p_ports_mutex);
std::memset(p2p_fd, 0, sizeof(p2p_fd)); std::memset(p2p_fd.data(), 0, p2p_fd.size() * sizeof(::pollfd));
auto num_p2p_sockets = 0; auto num_p2p_sockets = 0;
for (const auto& p2p_port : list_p2p_ports) for (const auto& p2p_port : list_p2p_ports)
{ {
@ -129,9 +131,9 @@ void network_thread::operator()()
if (num_p2p_sockets) if (num_p2p_sockets)
{ {
#ifdef _WIN32 #ifdef _WIN32
const auto ret_p2p = WSAPoll(p2p_fd, num_p2p_sockets, 1); const auto ret_p2p = WSAPoll(p2p_fd.data(), num_p2p_sockets, 1);
#else #else
const auto ret_p2p = ::poll(p2p_fd, num_p2p_sockets, 1); const auto ret_p2p = ::poll(p2p_fd.data(), num_p2p_sockets, 1);
#endif #endif
if (ret_p2p > 0) if (ret_p2p > 0)
{ {

View file

@ -189,12 +189,13 @@ s32 network_clear_queue(ppu_thread& ppu)
#ifdef _WIN32 #ifdef _WIN32
// Workaround function for WSAPoll not reporting failed connections // Workaround function for WSAPoll not reporting failed connections
void windows_poll(pollfd* fds, unsigned long nfds, int timeout, bool* connecting) void windows_poll(std::vector<pollfd>& fds, unsigned long nfds, int timeout, std::vector<bool>& connecting)
{ {
ensure(connecting); ensure(fds.size() >= nfds);
ensure(connecting.size() >= nfds);
// Don't call WSAPoll with zero nfds (errors 10022 or 10038) // Don't call WSAPoll with zero nfds (errors 10022 or 10038)
if (std::none_of(fds, fds + nfds, [](pollfd& pfd) if (std::none_of(fds.begin(), fds.begin() + nfds, [](pollfd& pfd)
{ {
return pfd.fd != INVALID_SOCKET; return pfd.fd != INVALID_SOCKET;
})) }))
@ -207,7 +208,7 @@ void windows_poll(pollfd* fds, unsigned long nfds, int timeout, bool* connecting
return; return;
} }
int r = ::WSAPoll(fds, nfds, timeout); int r = ::WSAPoll(fds.data(), nfds, timeout);
if (r == SOCKET_ERROR) if (r == SOCKET_ERROR)
{ {

View file

@ -26,5 +26,5 @@ bool is_ip_public_address(const ::sockaddr_in& addr);
s32 network_clear_queue(ppu_thread& ppu); s32 network_clear_queue(ppu_thread& ppu);
#ifdef _WIN32 #ifdef _WIN32
void windows_poll(pollfd* fds, unsigned long nfds, int timeout, bool* connecting); void windows_poll(std::vector<pollfd>& fds, unsigned long nfds, int timeout, std::vector<bool>& connecting);
#endif #endif