public MockTracerAgent(int port = 8126, int retries = 5) { // try up to 5 consecutive ports before giving up while (true) { // seems like we can't reuse a listener if it fails to start, // so create a new listener each time we retry var listener = new HttpListener(); listener.Prefixes.Add($"http://localhost:{port}/"); try { listener.Start(); // successfully listening Port = port; _listener = listener; _listenerThread = new Thread(HandleHttpRequests); _listenerThread.Start(); return; } catch (HttpListenerException) when(retries > 0) { // only catch the exception if there are retries left port = TcpPortProvider.GetOpenPort(); retries--; } // always close listener if exception is thrown, // whether it was caught or not listener.Close(); } }
public MockTracerAgent(int port = 8126, int retries = 5, bool useStatsd = false) { _cancellationTokenSource = new CancellationTokenSource(); if (useStatsd) { const int basePort = 11555; var retriesLeft = retries; while (true) { try { _udpClient = new UdpClient(basePort + retriesLeft); } catch (Exception) when(retriesLeft > 0) { retriesLeft--; continue; } _statsdThread = new Thread(HandleStatsdRequests) { IsBackground = true }; _statsdThread.Start(); StatsdPort = basePort + retriesLeft; break; } } // try up to 5 consecutive ports before giving up while (true) { // seems like we can't reuse a listener if it fails to start, // so create a new listener each time we retry var listener = new HttpListener(); listener.Prefixes.Add($"http://127.0.0.1:{port}/"); listener.Prefixes.Add($"http://localhost:{port}/"); try { listener.Start(); // successfully listening Port = port; _listener = listener; _listenerThread = new Thread(HandleHttpRequests); _listenerThread.Start(); return; } catch (HttpListenerException) when(retries > 0) { // only catch the exception if there are retries left port = TcpPortProvider.GetOpenPort(); retries--; } // always close listener if exception is thrown, // whether it was caught or not listener.Close(); } }
public MockTracerAgent(int port = 8126, int retries = 5, bool useStatsd = false, bool doNotBindPorts = false, int?requestedStatsDPort = null) { _cancellationTokenSource = new CancellationTokenSource(); if (doNotBindPorts) { // This is for any tests that want to use a specific port but never actually bind Port = port; return; } var listeners = new List <string>(); if (useStatsd) { if (requestedStatsDPort != null) { // This port is explicit, allow failure if not available StatsdPort = requestedStatsDPort.Value; _udpClient = new UdpClient(requestedStatsDPort.Value); } else { const int basePort = 11555; var retriesLeft = retries; while (true) { try { _udpClient = new UdpClient(basePort + retriesLeft); } catch (Exception) when(retriesLeft > 0) { retriesLeft--; continue; } StatsdPort = basePort + retriesLeft; break; } } _statsdTask = Task.Run(HandleStatsdRequests); listeners.Add($"Stats at port {StatsdPort}"); } // try up to 5 consecutive ports before giving up while (true) { // seems like we can't reuse a listener if it fails to start, // so create a new listener each time we retry var listener = new HttpListener(); listener.Prefixes.Add($"http://127.0.0.1:{port}/"); listener.Prefixes.Add($"http://localhost:{port}/"); var containerHostname = EnvironmentHelpers.GetEnvironmentVariable("CONTAINER_HOSTNAME"); if (containerHostname != null) { listener.Prefixes.Add($"{containerHostname}:{port}/"); } try { listener.Start(); // successfully listening Port = port; _listener = listener; listeners.Add($"Traces at port {Port}"); _tracesListenerTask = Task.Run(HandleHttpRequests); return; } catch (HttpListenerException) when(retries > 0) { // only catch the exception if there are retries left port = TcpPortProvider.GetOpenPort(); retries--; } finally { ListenerInfo = string.Join(", ", listeners); } // always close listener if exception is thrown, // whether it was caught or not listener.Close(); } }