private static void _setupNewSocketServer(RelayNode relayNode, string instanceName, int portNumber, bool useAsyncHandler, ConnectionWhitelist connectionWhitelist, bool whitelistOnly) 
		{
			//all public method should lock(_syncRoot) so we should be ok
			SocketServer socketServer = new SocketServer(instanceName, portNumber);

			IMessageHandler messageHandler;
			if (useAsyncHandler)
			{
				messageHandler = new SocketServerAsyncMessageHandler(relayNode, relayNode);
			}
			else
			{
				messageHandler = new SocketServerRelayMessageHandler(relayNode, relayNode);
			}

			socketServer.MessageHandler = messageHandler;
			socketServer.AcceptingConnectionsDelegate = relayNode.AcceptNewConnection;
			socketServer.WhitelistOnly = whitelistOnly;
			socketServer.Start(connectionWhitelist);

			_socketServer = socketServer;
			if (_cachedWhiteListValue != null)
			{
				_socketServer.WhitelistOnly = _cachedWhiteListValue.Value;
				_cachedWhiteListValue = null;
			}
    	}
        /// <summary>
        /// Stops the server from listening on a port.
        /// </summary>
		public static void Shutdown()
		{
			lock (_syncRoot)
			{
				if (_socketServer != null && _socketServer.IsRunning)
				{
					_socketServer.Stop();
					_socketServer = null;
				}
			}
		}