Пример #1
0
        private Task <bool> StartListenAsync(CancellationToken cancellationToken)
        {
            _channelCreators = new List <IChannelCreator>();

            var serverOptions = _serverOptions.Value;

            if (serverOptions.Listeners != null && serverOptions.Listeners.Any())
            {
                foreach (var l in serverOptions.Listeners)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        break;
                    }

                    if (!AddChannelCreator(l, serverOptions))
                    {
                        _logger.Error($"Failed to listen {l}.");
                        continue;
                    }
                }
            }
            else
            {
                _logger.Warn("No listner was defined, so this server only can accept connections from the ActiveConnect.");

                if (!AddChannelCreator(null, serverOptions))
                {
                    _logger.Error($"Failed to add the channel creator.");
                    return(Task.FromResult(false));
                }
            }

            return(Task.FromResult(true));
        }
Пример #2
0
        protected virtual void ApplySocketOptions(Socket socket, ListenOptions listenOptions, ChannelOptions channelOptions, Dynamic.Core.Log.ILogger logger)
        {
            try
            {
                if (listenOptions.NoDelay)
                {
                    socket.NoDelay = true;
                }
            }
            catch (Exception e)
            {
                logger.Warn("Failed to set NoDelay for the socket." + e.ToString());
            }

            try
            {
                if (channelOptions.ReceiveBufferSize > 0)
                {
                    socket.ReceiveBufferSize = channelOptions.ReceiveBufferSize;
                }
            }
            catch (Exception e)
            {
                logger.Warn(e.ToString() + "Failed to set ReceiveBufferSize for the socket.");
            }

            try
            {
                if (channelOptions.SendBufferSize > 0)
                {
                    socket.SendBufferSize = channelOptions.SendBufferSize;
                }
            }
            catch (Exception e)
            {
                logger.Warn(e.ToString() + "Failed to set SendBufferSize for the socket.");
            }

            try
            {
                if (channelOptions.ReceiveTimeout > 0)
                {
                    socket.ReceiveTimeout = channelOptions.ReceiveTimeout;
                }
            }
            catch (Exception e)
            {
                logger.Warn(e.ToString() + "Failed to set ReceiveTimeout for the socket.");
            }

            try
            {
                if (channelOptions.SendTimeout > 0)
                {
                    socket.SendTimeout = channelOptions.SendTimeout;
                }
            }
            catch (Exception e)
            {
                logger.Warn(e.ToString() + "Failed to set SendTimeout for the socket.");
            }

            try
            {
                _socketOptionsSetter?.Invoke(socket);
            }
            catch (Exception e)
            {
                logger.Warn(e.ToString() + "Failed to run socketOptionSetter for the socket.");
            }
        }