From 89a72a50cf7b23f2a363ed81b325e70c0dcf3119 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Wed, 11 Sep 2013 08:35:58 -0700 Subject: [PATCH] Better error message when port is in use --- NzbDrone.Host/NzbDrone.Host.csproj | 1 + NzbDrone.Host/Owin/OwinHostController.cs | 23 ++++++++++++++++++++++- NzbDrone.Host/Owin/PortInUseException.cs | 15 +++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 NzbDrone.Host/Owin/PortInUseException.cs diff --git a/NzbDrone.Host/NzbDrone.Host.csproj b/NzbDrone.Host/NzbDrone.Host.csproj index 49c4850bd..ad7214da7 100644 --- a/NzbDrone.Host/NzbDrone.Host.csproj +++ b/NzbDrone.Host/NzbDrone.Host.csproj @@ -125,6 +125,7 @@ + diff --git a/NzbDrone.Host/Owin/OwinHostController.cs b/NzbDrone.Host/Owin/OwinHostController.cs index 9968b22bb..8eabe82b5 100644 --- a/NzbDrone.Host/Owin/OwinHostController.cs +++ b/NzbDrone.Host/Owin/OwinHostController.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Net; +using System.Reflection; using Microsoft.Owin.Hosting; using NLog; using NzbDrone.Common.EnvironmentInfo; @@ -50,7 +52,26 @@ namespace NzbDrone.Host.Owin _logger.Info("starting server on {0}", _urlAclAdapter.UrlAcl); - _host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp); + try + { + _host = WebApp.Start(OwinServiceProviderFactory.Create(), options, BuildApp); + } + catch (TargetInvocationException ex) + { + if (ex.InnerException == null) + { + throw ex; + } + + if (ex.InnerException as HttpListenerException == null) + { + throw ex; + } + + throw new PortInUseException("Port {0} is already in use, please ensure NzbDrone is not already running.", + ex, + _configFileProvider.Port); + } } private void BuildApp(IAppBuilder appBuilder) diff --git a/NzbDrone.Host/Owin/PortInUseException.cs b/NzbDrone.Host/Owin/PortInUseException.cs new file mode 100644 index 000000000..5f6ea8f48 --- /dev/null +++ b/NzbDrone.Host/Owin/PortInUseException.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NzbDrone.Common.Exceptions; + +namespace NzbDrone.Host.Owin +{ + public class PortInUseException : NzbDroneException + { + public PortInUseException(string message, Exception innerException, params object[] args) : base(message, innerException, args) + { + } + } +}