private void OnAccept(IAsyncResult result) { try { var receivedSocket = _serverSocket.EndAccept(result); Console.WriteLine("Subscriber connected"); PerformHandshake(receivedSocket); var newSubscriber = new Subscriber(receivedSocket); var id = Broker.AddSubscriberToMap(newSubscriber); newSubscriber.SendMessage(id.ToString()); } catch (SocketException exp) { Console.WriteLine($"[ERR] {exp.Message}"); } catch (IndexOutOfRangeException exp) { Console.WriteLine($"[ERR] {exp.Message}"); } finally { if (_serverSocket != null && _serverSocket.IsBound) { _serverSocket.BeginAccept(null, 0, OnAccept, null); } } }