Starting appium on multiple devices via jenkins job

(moved this to support since I still can’t solve it, and not getting any replies)

Don’t really expect to get an answer but perhaps anyone can give me some pointers. I am trying to start multiple appium sessions automatically after jenkins build is complete. I make sure all the ports are closed prior to starting appium sessions. Yet sometimes (50/50) I get this error:

Unhandled Exception:
OpenQA.Selenium.WebDriverException: Unexpected error. System.Net.WebException: Error: ConnectFailure (Connection refused) —> System.Net.Sockets.SocketException: Connection refused
at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) [0x00000] in :0
at System.Net.WebConnection.Connect (System.Net.HttpWebRequest request) [0x00000] in :0
— End of inner exception stack trace —
at System.Net.HttpWebRequest.EndGetRequestStream (IAsyncResult asyncResult) [0x00000] in :0
at System.Net.HttpWebRequest.GetRequestStream () [0x00000] in :0
at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute (OpenQA.Selenium.Remote.Command commandToExecute) [0x00000] in :0
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute (System.String driverCommandToExecute, System.Collections.Generic.Dictionary2 parameters) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError (OpenQA.Selenium.Remote.Response errorResponse) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Remote.RemoteWebDriver.Execute (System.String driverCommandToExecute, System.Collections.Generic.Dictionary2 parameters) [0x00000] in :0
at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession (ICapabilities desiredCapabilities) [0x00000] in :0
at OpenQA.Selenium.Remote.RemoteWebDriver…ctor (ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) [0x00000] in :0
at OpenQA.Selenium.Appium.AppiumDriver1[OpenQA.Selenium.Appium.Android.AndroidElement]..ctor (ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Appium.AppiumDriver1[OpenQA.Selenium.Appium.Android.AndroidElement]…ctor (System.Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout) [0x00000] in :0
at OpenQA.Selenium.Appium.Android.AndroidDriver1[OpenQA.Selenium.Appium.Android.AndroidElement]..ctor (System.Uri remoteAddress, OpenQA.Selenium.Remote.DesiredCapabilities desiredCapabilities, TimeSpan commandTimeout) [0x00000] in <filename unknown>:0 at TestDriverLib.SessionModel.Start () [0x00000] in <filename unknown>:0 at TestDriverLib.Core.Start () [0x00000] in <filename unknown>:0 at TestDriverLib.Core..ctor (TestDriverLib.AppiumConfig appiumConfig, TestDriverLib.ExecutableConfig executableConfig) [0x00000] in <filename unknown>:0 at TestDriverConsole.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 *[ERROR] FATAL UNHANDLED EXCEPTION: OpenQA.Selenium.WebDriverException: Unexpected error. System.Net.WebException: Error: ConnectFailure (Connection refused) ---> System.Net.Sockets.SocketException: Connection refused* at System.Net.Sockets.Socket.Connect (System.Net.EndPoint remoteEP) [0x00000] in <filename unknown>:0 at System.Net.WebConnection.Connect (System.Net.HttpWebRequest request) [0x00000] in <filename unknown>:0 *--- End of inner exception stack trace ---* at System.Net.HttpWebRequest.EndGetRequestStream (IAsyncResult asyncResult) [0x00000] in <filename unknown>:0 at System.Net.HttpWebRequest.GetRequestStream () [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute (OpenQA.Selenium.Remote.Command commandToExecute) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Remote.RemoteWebDriver.Execute (System.String driverCommandToExecute, System.Collections.Generic.Dictionary2 parameters) [0x00000] in :0
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError (OpenQA.Selenium.Remote.Response errorResponse) [0x00000] in :0
at OpenQA.Selenium.Remote.RemoteWebDriver.Execute (System.String driverCommandToExecute, System.Collections.Generic.Dictionary2 parameters) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession (ICapabilities desiredCapabilities) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Remote.RemoteWebDriver..ctor (ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Appium.AppiumDriver1[OpenQA.Selenium.Appium.Android.AndroidElement]…ctor (ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) [0x00000] in :0
at OpenQA.Selenium.Appium.AppiumDriver1[OpenQA.Selenium.Appium.Android.AndroidElement]..ctor (System.Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout) [0x00000] in <filename unknown>:0 at OpenQA.Selenium.Appium.Android.AndroidDriver1[OpenQA.Selenium.Appium.Android.AndroidElement]…ctor (System.Uri remoteAddress, OpenQA.Selenium.Remote.DesiredCapabilities desiredCapabilities, TimeSpan commandTimeout) [0x00000] in :0
at TestDriverLib.SessionModel.Start () [0x00000] in :0
at TestDriverLib.Core.Start () [0x00000] in :0
at TestDriverLib.Core…ctor (TestDriverLib.AppiumConfig appiumConfig, TestDriverLib.ExecutableConfig executableConfig) [0x00000] in :0
at TestDriverConsole.MainClass.Main (System.String[] args) [0x00000] in :0

The call in TestDriver is quite basic:

public class SessionModel
{
	///....
	public void Start() { 
		mDriver = new AndroidDriver<AndroidElement>(mServerUri, mCapability, TimeSpan.FromSeconds(600));
    		mDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
    	}
   }