/// <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(); }