diff options
| author | 2022-08-13 13:11:01 -0500 | |
|---|---|---|
| committer | 2022-08-15 20:25:42 +0200 | |
| commit | 72b90a5bbf7a9308f7172f38be88e29bab58a21b (patch) | |
| tree | 981faf5a3a9c568b0ff00ba0ae1511e73368e649 /src | |
| parent | yuzu: Fix crash on shutdown (diff) | |
| download | yuzu-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.cpp | 46 | ||||
| -rw-r--r-- | src/core/internal_network/socket_proxy.h | 13 | ||||
| -rw-r--r-- | src/dedicated_room/CMakeLists.txt | 4 | ||||
| -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 | ||
| 15 | ProxySocket::ProxySocket(RoomNetwork& room_network_) noexcept : room_network{room_network_} {} | 15 | ProxySocket::ProxySocket(RoomNetwork& room_network_) noexcept : room_network{room_network_} {} |
| 16 | 16 | ||
| 17 | ProxySocket::ProxySocket(ProxySocket&& rhs) noexcept : room_network{rhs.room_network} { | ||
| 18 | fd = std::exchange(rhs.fd, INVALID_SOCKET); | ||
| 19 | } | ||
| 20 | |||
| 21 | ProxySocket::~ProxySocket() { | 17 | ProxySocket::~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 | ||
| 37 | template <typename T> | 33 | template <typename T> |
| 38 | Errno ProxySocket::SetSockOpt(SOCKET fd_, int option, T value) { | 34 | Errno 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 | ||
| 126 | std::pair<s32, Errno> ProxySocket::ReceivePacket(int flags, std::vector<u8>& message, | 130 | std::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 | ||
| 15 | class ProxySocket : public SocketBase { | 16 | class ProxySocket : public SocketBase { |
| 16 | public: | 17 | public: |
| 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 @@ | |||
| 4 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) | 4 | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) |
| 5 | 5 | ||
| 6 | add_executable(yuzu-room | 6 | add_executable(yuzu-room |
| 7 | yuzu-room.cpp | 7 | yuzu_room.cpp |
| 8 | yuzu-room.rc | 8 | yuzu_room.rc |
| 9 | ) | 9 | ) |
| 10 | 10 | ||
| 11 | create_target_directory_groups(yuzu-room) | 11 | create_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 | |||