summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar german772022-08-13 13:11:01 -0500
committerGravatar FearlessTobi2022-08-15 20:25:42 +0200
commit72b90a5bbf7a9308f7172f38be88e29bab58a21b (patch)
tree981faf5a3a9c568b0ff00ba0ae1511e73368e649 /src
parentyuzu: Fix crash on shutdown (diff)
downloadyuzu-72b90a5bbf7a9308f7172f38be88e29bab58a21b.tar.gz
yuzu-72b90a5bbf7a9308f7172f38be88e29bab58a21b.tar.xz
yuzu-72b90a5bbf7a9308f7172f38be88e29bab58a21b.zip
core: network: Address review comments
Diffstat (limited to 'src')
-rw-r--r--src/core/internal_network/socket_proxy.cpp46
-rw-r--r--src/core/internal_network/socket_proxy.h13
-rw-r--r--src/dedicated_room/CMakeLists.txt4
-rw-r--r--src/dedicated_room/yuzu_room.cpp (renamed from src/dedicated_room/yuzu-room.cpp)0
-rw-r--r--src/dedicated_room/yuzu_room.rc (renamed from src/dedicated_room/yuzu-room.rc)0
5 files changed, 31 insertions, 32 deletions
diff --git a/src/core/internal_network/socket_proxy.cpp b/src/core/internal_network/socket_proxy.cpp
index 216893ba1..7ce22dbfa 100644
--- a/src/core/internal_network/socket_proxy.cpp
+++ b/src/core/internal_network/socket_proxy.cpp
@@ -14,10 +14,6 @@ namespace Network {
14 14
15ProxySocket::ProxySocket(RoomNetwork& room_network_) noexcept : room_network{room_network_} {} 15ProxySocket::ProxySocket(RoomNetwork& room_network_) noexcept : room_network{room_network_} {}
16 16
17ProxySocket::ProxySocket(ProxySocket&& rhs) noexcept : room_network{rhs.room_network} {
18 fd = std::exchange(rhs.fd, INVALID_SOCKET);
19}
20
21ProxySocket::~ProxySocket() { 17ProxySocket::~ProxySocket() {
22 if (fd == INVALID_SOCKET) { 18 if (fd == INVALID_SOCKET) {
23 return; 19 return;
@@ -36,7 +32,6 @@ void ProxySocket::HandleProxyPacket(const ProxyPacket& packet) {
36 32
37template <typename T> 33template <typename T>
38Errno ProxySocket::SetSockOpt(SOCKET fd_, int option, T value) { 34Errno ProxySocket::SetSockOpt(SOCKET fd_, int option, T value) {
39 socket_options[option] = reinterpret_cast<const char*>(&value);
40 return Errno::SUCCESS; 35 return Errno::SUCCESS;
41} 36}
42 37
@@ -100,27 +95,36 @@ std::pair<s32, Errno> ProxySocket::RecvFrom(int flags, std::vector<u8>& message,
100 ASSERT(flags == 0); 95 ASSERT(flags == 0);
101 ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max())); 96 ASSERT(message.size() < static_cast<size_t>(std::numeric_limits<int>::max()));
102 97
103 { 98 const auto timestamp = std::chrono::steady_clock::now();
104 std::lock_guard guard(packets_mutex); 99
105 if (received_packets.size() > 0) { 100 while (true) {
106 return ReceivePacket(flags, message, addr, message.size()); 101 {
102 std::lock_guard guard(packets_mutex);
103 if (received_packets.size() > 0) {
104 return ReceivePacket(flags, message, addr, message.size());
105 }
107 } 106 }
108 }
109 107
110 if (blocking) { 108 if (!blocking) {
111 if (receive_timeout > 0) { 109 return {-1, Errno::AGAIN};
112 std::this_thread::sleep_for(std::chrono::milliseconds(receive_timeout));
113 } 110 }
114 } else {
115 return {-1, Errno::AGAIN};
116 }
117 111
118 std::lock_guard guard(packets_mutex); 112 // TODO: break if socket connection is lost
119 if (received_packets.size() > 0) { 113
120 return ReceivePacket(flags, message, addr, message.size()); 114 std::this_thread::yield();
121 } 115
116 if (receive_timeout == 0) {
117 continue;
118 }
122 119
123 return {-1, Errno::TIMEDOUT}; 120 const auto time_diff = std::chrono::steady_clock::now() - timestamp;
121 const auto time_diff_ms =
122 std::chrono::duration_cast<std::chrono::milliseconds>(time_diff).count();
123
124 if (time_diff_ms > receive_timeout) {
125 return {-1, Errno::TIMEDOUT};
126 }
127 }
124} 128}
125 129
126std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& message, 130std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& message,
diff --git a/src/core/internal_network/socket_proxy.h b/src/core/internal_network/socket_proxy.h
index ad917cac3..f12b5f567 100644
--- a/src/core/internal_network/socket_proxy.h
+++ b/src/core/internal_network/socket_proxy.h
@@ -7,6 +7,7 @@
7#include <vector> 7#include <vector>
8#include <queue> 8#include <queue>
9 9
10#include "common/common_funcs.h"
10#include "core/internal_network/sockets.h" 11#include "core/internal_network/sockets.h"
11#include "network/network.h" 12#include "network/network.h"
12 13
@@ -14,17 +15,12 @@ namespace Network {
14 15
15class ProxySocket : public SocketBase { 16class ProxySocket : public SocketBase {
16public: 17public:
18 YUZU_NON_COPYABLE(ProxySocket);
19 YUZU_NON_MOVEABLE(ProxySocket);
20
17 explicit ProxySocket(RoomNetwork& room_network_) noexcept; 21 explicit ProxySocket(RoomNetwork& room_network_) noexcept;
18 ~ProxySocket() override; 22 ~ProxySocket() override;
19 23
20 ProxySocket(const ProxySocket&) = delete;
21 ProxySocket& operator=(const ProxySocket&) = delete;
22
23 ProxySocket(ProxySocket&& rhs) noexcept;
24
25 // Avoid closing sockets implicitly
26 ProxySocket& operator=(ProxySocket&&) noexcept = delete;
27
28 void HandleProxyPacket(const ProxyPacket& packet) override; 24 void HandleProxyPacket(const ProxyPacket& packet) override;
29 25
30 Errno Initialize(Domain domain, Type type, Protocol socket_protocol) override; 26 Errno Initialize(Domain domain, Type type, Protocol socket_protocol) override;
@@ -87,7 +83,6 @@ private:
87 bool closed = false; 83 bool closed = false;
88 u32 send_timeout = 0; 84 u32 send_timeout = 0;
89 u32 receive_timeout = 0; 85 u32 receive_timeout = 0;
90 std::map<int, const char*> socket_options;
91 bool is_bound = false; 86 bool is_bound = false;
92 SockAddrIn local_endpoint{}; 87 SockAddrIn local_endpoint{};
93 bool blocking = true; 88 bool blocking = true;
diff --git a/src/dedicated_room/CMakeLists.txt b/src/dedicated_room/CMakeLists.txt
index 7b9dc9c04..b674b915b 100644
--- a/src/dedicated_room/CMakeLists.txt
+++ b/src/dedicated_room/CMakeLists.txt
@@ -4,8 +4,8 @@
4set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) 4set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
5 5
6add_executable(yuzu-room 6add_executable(yuzu-room
7 yuzu-room.cpp 7 yuzu_room.cpp
8 yuzu-room.rc 8 yuzu_room.rc
9) 9)
10 10
11create_target_directory_groups(yuzu-room) 11create_target_directory_groups(yuzu-room)
diff --git a/src/dedicated_room/yuzu-room.cpp b/src/dedicated_room/yuzu_room.cpp
index 482e772fb..482e772fb 100644
--- a/src/dedicated_room/yuzu-room.cpp
+++ b/src/dedicated_room/yuzu_room.cpp
diff --git a/src/dedicated_room/yuzu-room.rc b/src/dedicated_room/yuzu_room.rc
index a08957684..a08957684 100644
--- a/src/dedicated_room/yuzu-room.rc
+++ b/src/dedicated_room/yuzu_room.rc