private static void EndReceiveMessage(IAsyncResult asyncResult) { DataState dataState = (DataState)asyncResult.AsyncState; Socket handler = dataState.handler; byte[] buffer = dataState.buffer; int messageSize = handler.EndReceive(asyncResult); if (messageSize > 0) { string message = null; message = Encoding.ASCII.GetString(buffer, 0, messageSize); StartReceiveMessage(handler); OnMessageReceived(message); } else { clients.Remove(handler); handler.Shutdown(SocketShutdown.Both); handler.Close(); } }