aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2019-01-18 20:31:47 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-21 20:16:26 +0100
commitf83601de2f0d4e42afcdb4951e170b7b9450643e (patch)
tree326f9cfa9b10487a743f26bf60c6936c9d17c5a9 /src
parent05210c2a34146c9dcf50d30f6db6ad5fc0db7229 (diff)
Core/Networking: Set SO_REUSEADDR on *nix platforms
(cherry picked from commit 46f2595f511011d577be0ecee3d9f44c980ddc92)
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/Networking/AsyncAcceptor.h9
-rw-r--r--src/server/worldserver/TCSoap/TCSoap.cpp4
2 files changed, 13 insertions, 0 deletions
diff --git a/src/server/shared/Networking/AsyncAcceptor.h b/src/server/shared/Networking/AsyncAcceptor.h
index 89a17c2ec3c..6540db66474 100644
--- a/src/server/shared/Networking/AsyncAcceptor.h
+++ b/src/server/shared/Networking/AsyncAcceptor.h
@@ -84,6 +84,15 @@ public:
return false;
}
+#if TRINITY_PLATFORM != TRINITY_PLATFORM_WINDOWS
+ _acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true), errorCode);
+ if (errorCode)
+ {
+ TC_LOG_INFO("network", "Failed to set reuse_address option on acceptor %s", errorCode.message().c_str());
+ return false;
+ }
+#endif
+
_acceptor.bind(_endpoint, errorCode);
if (errorCode)
{
diff --git a/src/server/worldserver/TCSoap/TCSoap.cpp b/src/server/worldserver/TCSoap/TCSoap.cpp
index b5c0804bd44..996e9d5e82e 100644
--- a/src/server/worldserver/TCSoap/TCSoap.cpp
+++ b/src/server/worldserver/TCSoap/TCSoap.cpp
@@ -29,6 +29,10 @@ void TCSoapThread(const std::string& host, uint16 port)
soap_set_imode(&soap, SOAP_C_UTFSTRING);
soap_set_omode(&soap, SOAP_C_UTFSTRING);
+#if TRINITY_PLATFORM != TRINITY_PLATFORM_WINDOWS
+ soap.bind_flags = SO_REUSEADDR;
+#endif
+
// check every 3 seconds if world ended
soap.accept_timeout = 3;
soap.recv_timeout = 5;