private static void AsyncRecv(IAsyncResult ar) { ClientBase client = (ClientBase) ar.AsyncState; try { int num_bytes = client.TcpSocket.EndReceive(ar); if (num_bytes == 0) { client.Server.DisconnectClient(client); } else { unchecked { client.m_bytesRecv += num_bytes; m_totalBytesRecv += (uint) num_bytes; } client.OnReceive(num_bytes); client.TcpSocket.BeginReceive(client.m_inBuf, client.InOffset, client.m_inBuf.Length - client.InOffset, SocketFlags.None, new AsyncCallback(AsyncRecv), client); } } catch (ObjectDisposedException) { client.Server.DisconnectClient(client); } catch (Exception e) { client.Server.Warning(client, e); client.Server.DisconnectClient(client); } }