1.3.1 How DXDiag Uses DirectPlay

DirectPlay DXDiag Usage Protocol packets are transported by means of User Datagram Protocol (UDP) (as specified in [RFC768]) and internetwork packet exchange [IPX]. To facilitate transport over unreliable serial streams, such as those provided by direct connection serial and modem links, a message format with signatures and checksums is defined in section 2.2.

Enumeration packets are used for lightweight discovery of available game sessions, typically on a local area network (LAN). The computer hosting a DXDiag game session listens for incoming enumeration queries from a remote computer and responds with enumeration replies. Upon receiving the response, the remote computer initiates a stateful connection to the hosting computer in order to participate in the game session.

In the DXDiag game session, an array of identifiers is contained in a name table. When a new client joins a session, the client receives a name table that lists all of the clients currently in the game session. When a client departs the game session, the identifier for that client is removed from the name table. The name table itself is kept current through the use of a version number.

The DirectPlay DXDiag Usage Protocol is a sliding window protocol that requires the receiver to acknowledge received UDP packets before more packets are transmitted. An acknowledgment (ACK) can be conveyed in one of two ways: either bundled within back traffic sent from the receiver, or, when no back traffic is flowing, sent from the receiver as a dataless selective acknowledgment (SACK) packet.

When the ACK is bundled within back traffic, fields within the header are used to indicate the sequence number of the next expected packet. This acknowledges that all packets with sequence numbers less than the specified number have been received correctly. If an ACK is not received within a specified amount of time, the original packet is resent with the same sequence number as was previously assigned.

Note The specified amount of time is derived from the current round-trip time (RTT) measured by previously acknowledged messages. An initial RTT measurement is also taken from the TRANS_COMMAND_CONNECT_ACCEPT response to the TRANS_COMMAND_CONNECT or TRANS_COMMAND_CONNECT_ACCEPT packet sent during the initial handshake.

If the original sender specifies poll packet (POLL) (ACK now) in the packet header, the receiver immediately acknowledges the packet when it arrives.