titanium-web-proxy
                                
                                 titanium-web-proxy copied to clipboard
                                
                                    titanium-web-proxy copied to clipboard
                            
                            
                            
                        Socket Invalid Argument...
Hello, I am using the proxy in an automation tool I wrote for my client. He had to setup a new pc and has been having trouble starting the tool. This is a fresh install of Windows 10 rel 1809. I was able to capture a log of the error he is experiencing and have included it and a sample of the code below. Has anyone experienced this issue? I have been unable to reproduce this issue, so I'm hoping that someone has experienced a similar situation. Thanks in advance.
Error Log (sanitized):
System.AggregateException: One or more errors occurred. ---> System.Net.Sockets.SocketException: An invalid argument was supplied at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType) at System.Net.Sockets.TcpListener..ctor(IPAddress localaddr, Int32 port) at Titanium.Web.Proxy.ProxyServer.listen(ProxyEndPoint endPoint) at Titanium.Web.Proxy.ProxyServer.Start() at AutomatedGrabber.Core.Infrastructure.AutomatedGrabberTransparentHttpObserver.StartProxy() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\AutomatedGrabberTransparentHttpObserver.cs:line 106 at AutomatedGrabber.Core.Infrastructure.AutomatedGrabberTransparentHttpObserver.GetObservationsInternal() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\AutomatedGrabberTransparentHttpObserver.cs:line 36 at AutomatedGrabber.Core.Infrastructure.BaseTransparentHttpObserver.<GetObservations>d__2.MoveNext() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\BaseTransparentHttpObserver.cs:line 21 --- End of inner exception stack trace --- at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) at System.Threading.Tasks.Task1.GetResultCore(Boolean waitCompletionNotification)
at System.Threading.Tasks.Task1.get_Result() at AutomatedGrabber.Core.Infrastructure.AutomatedGrabberApiClient.Logon() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\AutomatedGrabberApiClient.cs:line 50 ---> (Inner Exception #0) System.Net.Sockets.SocketException (0x80004005): An invalid argument was supplied at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType) at System.Net.Sockets.TcpListener..ctor(IPAddress localaddr, Int32 port) at Titanium.Web.Proxy.ProxyServer.listen(ProxyEndPoint endPoint) at Titanium.Web.Proxy.ProxyServer.Start() at AutomatedGrabber.Core.Infrastructure.AutomatedGrabberTransparentHttpObserver.StartProxy() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\AutomatedGrabberTransparentHttpObserver.cs:line 106 at AutomatedGrabber.Core.Infrastructure.AutomatedGrabberTransparentHttpObserver.GetObservationsInternal() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\AutomatedGrabberTransparentHttpObserver.cs:line 36 at AutomatedGrabber.Core.Infrastructure.BaseTransparentHttpObserver.<GetObservations>d__2.MoveNext() in C:\Users\larryb\Documents\Projects\AutomatedGrabber\AutomatedGrabber.Core\Infrastructure\BaseTransparentHttpObserver.cs:line 21<---
Code In Question (sanitized):
public AutomatedGrabberTransparentHttpObserver()
        {
            _proxyServer = new ProxyServer();
            _observedValues = new ConcurrentBag<ObservedValue>();
            _secondsToWait = (int)TimeSpan.FromMinutes(10).TotalSeconds;
            InitProxy();
        }
private void InitProxy()
        {
            _proxyServer.ForwardToUpstreamGateway = true;
            var endpoint = new ExplicitProxyEndPoint(IPAddress.Any, 8000);
            _proxyServer.AddEndPoint(endpoint);
            _proxyServer.BeforeResponse += ProxyServerOnBeforeResponse;
            _proxyServer.ExceptionFunc += exception => Console.WriteLine(exception.Message);
            endpoint.BeforeTunnelConnectRequest += EndpointOnBeforeTunnelConnectRequest;
        }
protected override Task<IEnumerable<ObservedValue>> GetObservationsInternal()
        {
            StartProxy();
            _observationComplete = false;
            var timedOut = false;
            var startTime = DateTime.Now;
            while (!_observationComplete && !timedOut)
            {
                _observationComplete = ValidateObservationComplete();
                Task.Delay(TimeSpan.FromMilliseconds(100));
                var timeDiff = DateTime.Now.Subtract(startTime);
                if (timeDiff.TotalSeconds >= _secondsToWait)
                {
                    timedOut = true;
                }
            }
            StopProxy();
            if (_observationComplete)
            {
                var toReturn = _observedValues.ToArray();
                return Task.FromResult<IEnumerable<ObservedValue>>(toReturn);
            }
            if (timedOut)
            {
                var exception = new HeaderTimeoutException();
                return Task.FromException<IEnumerable<ObservedValue>>(exception);
            }
            return Task.FromResult(Enumerable.Empty<ObservedValue>());
        }
private void StartProxy()
        {
            var endpoint = _proxyServer.ProxyEndPoints.OfType<ExplicitProxyEndPoint>().FirstOrDefault();
            _proxyServer.Start();
            if (endpoint != null)
            {
                _proxyServer.SetAsSystemHttpsProxy(endpoint);
            }
        }
Are you perhaps calling StartProxy multiple times, trying to bind to same port and IP twice or more? Please provide a full project to reproduce this issue perhaps by uploading it as a zip file or as a repository.
https://stackoverflow.com/questions/19874725/system-net-sockets-socketeexception-an-invalid-argument-was-supplied-error-code
Sorry, I am just getting back to this. It appears to have been a misleading error. The error was definitely happening, but I believe something on his pc was causing it to block the initial socket creation and leaving things in a weird state where the code believed the socket was open even though the system was blocking all traffic. Then the second time that error would occur. He switched to a different computer and it worked fine. Who knows.
Strange. Does it still happen? May I close this issue?