public void RecvCallback(IAsyncResult Result) { try { if (Result == null) return; int RecvBytes = Socket.EndReceive(Result); byte[] TempBuffer = new byte[RecvBytes]; if (BytesToGo == 0 && RecvBytes < 2) { // malformed packet, log this log.Info("RecvCallback::Malformed packet"); return; } if (BytesToGo == 0) { Array.Copy(RecvBuffer, 0, TempBuffer, 0, 2); BytesToGo = (int)Marshal.ConvertToInt16(TempBuffer); } else { BytesToGo -= RecvBytes; } if (RecvBytes > Packet.PacketSize) { log.Info("RecvCallback::Buffer overflow!"); return; } Array.Copy(RecvBuffer, 0, PacketBuffer, PacketBuffer.Length, RecvBytes); RecvBuffer = new byte[Packet.PacketSize]; if (PacketBuffer.Length > 0 && BytesToGo == 0) { ProcessBytes(PacketBuffer); PacketBuffer = new byte[Packet.PacketSize]; } BeginRecv(); } catch (Exception ex) { log.Info("RecvCallback::Exception", ex); } }