It might depend on what we mean by “send” here:
I agree it is scheduled immediately, and then sent when the next actual UDP packet is made and sent.
AttachmentSendQueue.Enqueue(OwnerIndex, SubObjectIndex, reinterpret_cast<const TRefCountPtr<FNetObjectAttachment>&>(RPC));
And then the data that come back, for correction, is subject to a send rate limit:
» if( (ServerData->LastUpdateTime != GetWorld()->TimeSeconds))
» {
» » const AGameNetworkManager* GameNetworkManager = (const AGameNetworkManager*)(AGameNetworkManager::StaticClass()->GetDefaultObject());
» » if (GameNetworkManager->WithinUpdateDelayBounds(PC, ServerData->LastUpdateTime))
» » {
» » » return;
» » }
» }
This ends up checking two configurations: a maximum send interval, and a value derived from client net rate.
Anyway: to double down on the answer to the original question up top: CharacterMovementComponent does not keep its physics deterministic, and does not keep a fixed deltaTime, and corrections are only sent and acted on when the movement position delta is “too large.”