Skip to content

Commit b1b02e0

Browse files
RipleyTomMegamouse
authored andcommitted
Bind RPCN client socket only if bind_ip is set
1 parent 6854e9b commit b1b02e0

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

rpcs3/Emu/Cell/lv2/sys_net/nt_p2p_port.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,14 @@ nt_p2p_port::nt_p2p_port(u16 port)
7575
else
7676
{
7777
::sockaddr_in p2p_ipv4_addr{.sin_family = AF_INET, .sin_port = be_port};
78-
p2p_ipv4_addr.sin_addr.s_addr = nph.get_bind_ip();
78+
const u32 bind_ip = nph.get_bind_ip();
79+
p2p_ipv4_addr.sin_addr.s_addr = bind_ip;
7980

80-
if (ret_bind = ::bind(p2p_socket, reinterpret_cast<const sockaddr*>(&p2p_ipv4_addr), sizeof(p2p_ipv4_addr)); ret_bind == -1)
81+
if (ret_bind = ::bind(p2p_socket, reinterpret_cast<const sockaddr*>(&p2p_ipv4_addr), sizeof(p2p_ipv4_addr)); ret_bind == -1 && bind_ip)
8182
{
82-
if (nph.get_bind_ip())
83-
{
84-
sys_net.error("Failed to bind to %s:%d, falling back to 0.0.0.0:%d", np::ip_to_string(nph.get_bind_ip()), port, port);
85-
p2p_ipv4_addr.sin_addr.s_addr = 0;
86-
ret_bind = ::bind(p2p_socket, reinterpret_cast<const sockaddr*>(&p2p_ipv4_addr), sizeof(p2p_ipv4_addr));
87-
}
83+
sys_net.error("Failed to bind to %s:%d, falling back to 0.0.0.0:%d", np::ip_to_string(bind_ip), port, port);
84+
p2p_ipv4_addr.sin_addr.s_addr = 0;
85+
ret_bind = ::bind(p2p_socket, reinterpret_cast<const sockaddr*>(&p2p_ipv4_addr), sizeof(p2p_ipv4_addr));
8886
}
8987
}
9088

rpcs3/Emu/Cell/lv2/sys_net/sys_net_helpers.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
#include "sys_net_helpers.h"
77
#include "network_context.h"
88

9+
#ifdef _WIN32
10+
#include "Emu/NP/np_handler.h"
11+
#include "Emu/NP/np_helpers.h"
12+
#endif
13+
914
LOG_CHANNEL(sys_net);
1015

1116
int get_native_error()
@@ -159,8 +164,19 @@ ::sockaddr_in sys_net_addr_to_native_addr(const sys_net_sockaddr& sn_addr)
159164
// Windows doesn't support sending packets to 0.0.0.0 but it works on unixes, send to 127.0.0.1 instead
160165
if (native_addr.sin_addr.s_addr == 0x00000000)
161166
{
162-
sys_net.warning("[Native] Redirected 0.0.0.0 to 127.0.0.1");
163-
native_addr.sin_addr.s_addr = std::bit_cast<u32, be_t<u32>>(0x7F000001);
167+
auto& nph = g_fxo->get<named_thread<np::np_handler>>();
168+
if (const u32 bind_addr = nph.get_bind_ip(); bind_addr != 0)
169+
{
170+
// If bind IP is set 0.0.0.0 was bound to binding_ip so we need to connect to that ip
171+
sys_net.warning("[Native] Redirected 0.0.0.0 to %s", np::ip_to_string(bind_addr));
172+
native_addr.sin_addr.s_addr = bind_addr;
173+
}
174+
else
175+
{
176+
// Otherwise we connect to localhost which should be bound
177+
sys_net.warning("[Native] Redirected 0.0.0.0 to 127.0.0.1");
178+
native_addr.sin_addr.s_addr = std::bit_cast<u32, be_t<u32>>(0x7F000001);
179+
}
164180
}
165181
#endif
166182

rpcs3/Emu/NP/ip_address.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#include "Emu/Cell/lv2/sys_net/sys_net_helpers.h"
21
#include "stdafx.h"
32
#include "Emu/system_config.h"
43
#include "ip_address.h"

rpcs3/Emu/NP/rpcn_client.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1078,9 +1078,9 @@ namespace rpcn
10781078
sockaddr_in sock_addr = {.sin_family = AF_INET};
10791079
sock_addr.sin_addr.s_addr = binding_address;
10801080

1081-
if (::bind(sockfd, reinterpret_cast<const sockaddr*>(&sock_addr), sizeof(sock_addr)) == -1)
1081+
if (binding_address != 0 && ::bind(sockfd, reinterpret_cast<const sockaddr*>(&sock_addr), sizeof(sock_addr)) == -1)
10821082
{
1083-
rpcn_log.error("bind: Failed to bind RPCN client socket to binding address!");
1083+
rpcn_log.error("bind: Failed to bind RPCN client socket to binding address(%s): 0x%x!", np::ip_to_string(binding_address), get_native_error());
10841084
state = rpcn_state::failure_binding;
10851085
return false;
10861086
}

0 commit comments

Comments
 (0)