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)); }
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."); } }