Example #1
0
        /// <summary>
        /// Run accepter in separate thread
        /// </summary>
        internal void Run()
        {
            _listener.Start(4096 * 4 * 2);
            var synchronizedAccepter = new Thread(() =>
            {
                for (;;)
                {
                    TcpClient clientSocket = null;
                    clientSocket           = _listener.AcceptTcpClient();

                    Task.Run(() =>
                    {
                        IPEndPoint ep = null;
                        try
                        {
                            ep = clientSocket.Client.RemoteEndPoint as IPEndPoint;
                        }
                        catch (SocketException ex)
                        {
                            //Why on Earth we should suffer from exception when reading IP adress...
                            Log.Error($"IP reading with errorcode {ex.ErrorCode} of exception {ex}");
                        }

                        var buffer = _bufferProvider.GetBuffer();
                        var ip     = ep == null ? null : ep.Address;
                        var client = new Client(clientSocket, ip, buffer);
                        _onClientAccepted(client);
                    });
                }
            });

            synchronizedAccepter.Start();
            //acceptClientAsync();
        }