diff options
author | Mattes D <github@xoft.cz> | 2015-02-08 00:08:18 +0100 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2015-02-08 00:08:18 +0100 |
commit | 5ee5a691b778d7901c79851c68c3e7664a12c476 (patch) | |
tree | cc1d5dbc43dee634a402cb14bc0d6386fd3b0973 | |
parent | Merge pull request #1718 from mc-server/LuaNetworkAPI (diff) | |
parent | Use evutil_make_listen_socket_reuseable (diff) | |
download | cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.tar cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.tar.gz cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.tar.bz2 cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.tar.lz cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.tar.xz cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.tar.zst cuberite-5ee5a691b778d7901c79851c68c3e7664a12c476.zip |
-rw-r--r-- | src/OSSupport/ServerHandleImpl.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/OSSupport/ServerHandleImpl.cpp b/src/OSSupport/ServerHandleImpl.cpp index 5fc5662e1..6f4343b1f 100644 --- a/src/OSSupport/ServerHandleImpl.cpp +++ b/src/OSSupport/ServerHandleImpl.cpp @@ -125,6 +125,12 @@ bool cServerHandleImpl::Listen(UInt16 a_Port) bool NeedsTwoSockets = false; int err; evutil_socket_t MainSock = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); + + // Set reuse flag + #if !defined(_WIN32) + evutil_make_listen_socket_reuseable(MainSock); + #endif + if (!IsValidSocket(MainSock)) { // Failed to create IPv6 socket, create an IPv4 one instead: @@ -193,6 +199,7 @@ bool cServerHandleImpl::Listen(UInt16 a_Port) } m_ConnListener = evconnlistener_new(cNetworkSingleton::Get().GetEventBase(), Callback, this, LEV_OPT_CLOSE_ON_FREE | LEV_OPT_REUSEABLE, 0, MainSock); m_IsListening = true; + if (!NeedsTwoSockets) { return true; @@ -201,6 +208,12 @@ bool cServerHandleImpl::Listen(UInt16 a_Port) // If a secondary socket is required (WinXP dual-stack), create it here: LOGD("Creating a second socket for IPv4"); evutil_socket_t SecondSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + // Set reuse flag + #if !defined(_WIN32) + evutil_make_listen_socket_reuseable(SecondSock); + #endif + if (!IsValidSocket(SecondSock)) { err = EVUTIL_SOCKET_ERROR(); @@ -233,7 +246,7 @@ bool cServerHandleImpl::Listen(UInt16 a_Port) if (listen(SecondSock, 0) != 0) { err = EVUTIL_SOCKET_ERROR(); - LOGD("Cannot listen on on secondary socket on port %d: %d (%s)", a_Port, err, evutil_socket_error_to_string(err)); + LOGD("Cannot listen on secondary socket on port %d: %d (%s)", a_Port, err, evutil_socket_error_to_string(err)); evutil_closesocket(SecondSock); return true; // Report as success, the primary socket is working } |