TDI provides connection-oriented services at the transport layer to provide the highest quality of service at the lowest cost. Depending on the specific driver protocol, this can involve packetizing of client data, sequencing, acknowledgment, retransmission, flow-control, and error recovery.
TDI also provides connectionless services for datagrams. However, these services are lightweight: they do not provide error-free delivery or flow control. The transport layer generally does not segment or reassemble datagrams. Delivery of connectionless data is best-effort only for TDI transports.
A datagram send is an inherently unreliable form of network communication. The sending client has no way of determining how many or which remote-node clients have opened the target remote-node address or whether the remote-node transport is currently accepting datagrams. Furthermore, the local-node TDI driver can lose or duplicate a datagram at the discretion of the transport driver writer. By contrast, the local-node transport is responsible for retrying sends on an established endpoint-to-endpoint connection until the transmitted data is accepted on the remote node and acknowledged by the remote-node transport while the endpoint-to-endpoint connection is active.
Like a datagram-send, a datagram receive operation can be unreliable. That is, the local-node TDI driver can lose or duplicate a received datagram at the discretion of the transport driver writer. By contrast, the local-node transport is responsible for delivering a receive on an established endpoint-to-endpoint connection until the transmitted data is accepted (or rejected) by its client and acknowledged to the remote-node transport while the endpoint-to-endpoint connection is active.
An endpoint-to-endpoint connection remains active until it is broken by a disconnect operation, as described later in Section 5.11 or until the underlying transport's time-out logic determines that the remote node is failing to respond.