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