void OnReceive(IAsyncResult ar) { var sc = (SocketConnection)ar.AsyncState; try { int bytesReceived = sc.Socket.EndReceive(ar); if (bytesReceived > 0) { // There might be more data, so store the data received so far and check for eof if (sc.CopyBuffer(bytesReceived)) { var replyBuffer = selector.Select(sc.GetDataBuffer()); sc.Socket.BeginSend(replyBuffer, 0, replyBuffer.Length, SocketFlags.None, OnSend, sc); } else { // Not there, read more data sc.Socket.BeginReceive(sc.SocketBuffer, 0, sc.BufferSize, SocketFlags.None, OnReceive, sc); } } } catch (Exception ex) { CloseConnection(sc); Logger.Error("An error has occured while trying to receive data from the client. Exception = {0}", LogSource.AppServer, ex); } }