RetransmitRequest to the gateway; the gateway serves cached SBE messages back via UDP unicast.
See Multicast Channels for the list of available feeds and their addresses. See Multicast Subscription Guide for connection setup.
Wire Protocol
All multi-byte values are little-endian.Packet Header
Every packet (requests and responses) begins with a 24-byte header.packetType Bitmask
A successful retransmit response sets
packetType = 0x05 (INCREMENTAL | RETRANSMIT). A reject response sets packetType = 0x00.
SBE Message Header
Each SBE message within a packet is prefixed by a 16-bytemdMessageHeader:
The gateway validates only
templateId (must be 200) and messageLength (must be 25) on incoming RetransmitRequest packets. Other header fields are not checked.Messages
RetransmitRequest (template ID 200)
Sent to the gateway as a UDP unicast packet.
The packet header’s
seqNum field (offset 8) carries the client’s correlationId. Set this to any value you want echoed back on rejection.
RetransmitReject (template ID 202)
Returned when the request cannot be fulfilled.Reject Reason Codes
Successful Response
There is no separate response message type. A successful retransmit response is a normal incremental packet withpacketType = 0x05, containing one or more SBE market data messages starting at beginSeqNum. The packet header’s seqNum is set to beginSeqNum.
The gateway caps response size at 1400 bytes (MTU limit). If the requested
messageCount would exceed this, fewer messages are returned. Always read messageCount from the response packet header and issue follow-up requests for any remainder.Correlation ID Semantics
Do not use
correlationId to identify successful responses. Match success responses by beginSeqNum instead.
Cache Behavior
The retransmit cache stores individual SBE message frames. Older entries are evicted as new messages arrive. A request for abeginSeqNum that has been evicted receives SEQ_TOO_LOW.
SEQ_TOO_LOW can be returned even for a beginSeqNum that appears to fall within the cached range. Treat it as unrecoverable regardless of cause, as the messages are not available in the cache.Rate Limiting
- Throttled per source IPv4 address (not per connection or per channel)
- Subject to a per-IP request rate limit
- Rate-limited requests receive
RetransmitRejectwithreason = RATE_LIMIT_EXCEEDED - The
retryDelayNanosfield in the reject specifies exactly how long to wait before retrying
Client Implementation Notes
Paging large gaps.messageCount in the request is uint8 (max 255). For gaps larger than 255, send sequential requests incrementing beginSeqNum by the number of messages actually received in each response.
Check response messageCount. The response may contain fewer messages than requested due to the 1400-byte MTU cap. Always read messageCount from the response packet header to know how many messages were returned before issuing a follow-up request.
Match success responses by beginSeqNum. Successful responses do not echo correlationId. If you need to correlate requests with responses, match on the beginSeqNum value from the response packet header’s seqNum field.
Handle SEQ_TOO_LOW as unrecoverable. Whether the sequence is genuinely older than the cache window or the byte ring has wrapped, the result is the same: the messages are gone. Fall back to the snapshot feed to re-synchronize.
Respect retryDelayNanos. On any reject, wait at least the specified delay before retrying. For OTHER_ERROR, apply a backoff because the service may be warming up.
Retransmits are best-effort UDP. Both the request and the response may be lost in transit. Implement a timeout and retry loop in your client. If no response arrives within your timeout, resend the request (subject to retryDelayNanos constraints).