TcpIpLisener C# Only one usage of each socket address (protocol/network address/port) is normally permitted

Я разрабатываю Asp.Net core сервер внутри которого расположен TcpIp сервер который поднимается на другом порту.

Код старта TcpIp сервера представлен ниже. Сама проблема возникает именно на развернутой на IIS версии моего сервера. Когда стартует сервер, в потоке Listener происходит ошибка "TcpIpLisener C# Only one usage of each socket address (protocol/network address/port) is normally permitted.". Если же стартовать сервер в режиме дебага из Студии (как через IIS так и из самой программы), все стартует как нужно сервер поднимается и клиент может подключиться, обмениваться сообщением и прочие (словом все работает как задумано).

Версия IIS 6.2 Windows server 2012

public class TcpHub 
    {
        public TcpHub(IConfiguration configuration, ILoggerFactory loggerFactory)
        {
            logger = loggerFactory.CreateLogger(LoggerNames.SENDER_LOGGER);
            try
            {
                int port = configuration.GetSection("TcpListenerHost").Get<int>();
                tcpListener = new TcpListener(IPAddress.Any, port);
            }
            catch (Exception e)
            {
                logger.LogError(e, "Can`t create Tcp listener");
            }
        }

        private readonly TcpListener tcpListener;
        private readonly ILogger logger;

        private readonly ManualResetEvent listenersReset = new(false);
        private readonly ManualResetEvent threadStopped = new(false);

        private readonly Dictionary<string, TcpClientWrapper> clients = new();

        private void Listen()
        {
            try
            {
                tcpListener.Start(); /* тут возникает ошибка TcpIpLisener C# Only one usage of each socket address (protocol/network address/port) is normally permitted.*/
                while (!listenersReset.WaitOne(0))
                {
                    try
                    {
                        TcpClient client = tcpListener.AcceptTcpClient();
                        lock (clients)
                        {
                           /*Добавлфем клиентов*/
                        }
                    }
                    catch (Exception e)
                    {
                        logger.LogError(e, "Error while accepting client");
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogError(e, "Critical Error in TcpListener listener is stopped");
            }

            threadStopped.Set();
        }

        private void ClientWrapper_Stopped(TcpClientWrapper client)
        {
            client.Stopped -= ClientWrapper_Stopped;
            clients.Remove(client.ConnectionId);
        }

        public void Start()
        {
            if (tcpListener != null)
            {
                new Thread(Listen).Start();
            }
        }

        public void Stop()
        {
            listenersReset.Set();

            threadStopped.WaitOne();

            foreach (var client in clients.Values)
            {
                client.Stop();
            }
        }
    }

Из догадок, может это происходит от того что порт на котором я стараюсь запустить TcpIp сервер закрыт ? Даже когда я добавил в файрвол правило на открытие порта он все еще отображается как закрытый (команда Test-netConnection {Ip} -Port {port} - не может подключиться и так же команда netstat -an не отображает мой порт). Возможно знаете места кроме файрвола которые могут блочить порт ?


Ответы (0 шт):