All packets within a given channel are ordered by sequence number. It also happens that a packets is delivered only if all preceding reliable packets in the sequence have been delivered, with missing preceding unreliable packets in the sequence simply being ignored, if this particular packet is ready to be delivered. If some packet later in a sequence has already been delivered, and the packet being considered for delivery is earlier in the sequence, it will be discarded; this rule only really effects unreliable packets, or packets that somehow duplicated in transit.

The way this works is that a sequence number has, in effect, two portions X.Y. The X portion being a reliable sequence number, that gets incremented when a reliable packet is sent, and the Y portion being the unreliable sequence number, which is reset back to 0. Now, when an unreliable packet is sent, X does not get incremented, but Y does. This is how ENet knows if there were any undelivered reliable packets preceding an unreliable packet in the stream, since the unreliable packet will have a higher reliable sequence number. So reliable packets serve as synchronization points in a channel, even across unreliable packets.

Lee

M. Rijks wrote:
Hi everyone,

A question concerning channels and ordering of guaranteed and non-guaranteed packets. If I understand Enet well enough, channels can be considered different queues of incoming packets. Now consider this scenario: let's assume I'm sending both guaranteed and non-guaranteed packets on the same channel, and that Enet spends some time receiving a guaranteed packet (it won't 'give' the packet to me until it is fully received). What happens for any non-guaranteed packet sent on the same channel? I suppose the sending end could already have started to send the non-guaranteed packet, then realizing one of the guaranteed packets might not have arrived, and trigger a resend. Or does it stall subsequent packets and wait for confirmation of the previous message? If it doesn't stall, then on the receiving end will Enet keep waiting for full delivery of all parts (when the packet is large) before giving me subsequent packets that may have arrived in between?

All reactions appreciated!


_______________________________________________
ENet-discuss mailing list
[email protected]
http://lists.cubik.org/mailman/listinfo/enet-discuss

Reply via email to