aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2019-01-18 20:31:47 +0100
committerjackpoz <giacomopoz@gmail.com>2019-01-18 20:31:47 +0100
commit46f2595f511011d577be0ecee3d9f44c980ddc92 (patch)
treebc2eb4386005a75634998bb5226944f16aed1972 /src
parent12852ddb3019aabc2f6deaff9c1b0584fd1b6bb2 (diff)
Core/Networking: Set SO_REUSEADDR on *nix platforms
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 926ab6d4d1c..62d418dd6fe 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 83e49396b04..88c79fa91d3 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;