| Previous | Next |
| STATUS_TRANSACTION_NO_MATCH | STATUS_TRANSACTION_INVALID_ID |
STATUS_TRANSACTION_RESPONDED
A second response attempt is different from a duplicate request
Microsoft describes STATUS_TRANSACTION_RESPONDED as a transport having previously responded to a transaction request. The valuable word is previously: the transaction state machine already records a response. This is not the same as STATUS_TRANSACTION_NO_MATCH, because a transaction is known, and it is not the same as timeout, because response processing has already occurred.
Investigate duplicate or late response paths. A completion callback can race with cancellation; two worker paths can both decide to answer the same request; a retransmitted peer request can be incorrectly associated with an old transaction if generation state is weak. The status alone does not identify which of those occurred. Legacy TDI documentation is useful architectural context because transport requests are dispatched through object-specific state and can be pending while lower protocol work completes, creating exactly the kind of asynchronous lifecycle where a second response guard is necessary.
Record the transaction/token ID, first response timestamp and result, second responder identity, request type, and endpoint generation. Do not suppress the status and send the second response anyway unless the provider protocol explicitly allows multiple responses. The code is evidence that the transport believes its single-response state has already been consumed; bypassing that guard can turn a recoverable state-machine bug into wire corruption or resource imbalance.
What to inspect
- Preserve the first response and the later response attempt with thread/callback identities.
- Check cancellation and worker-race paths for two responders to one transaction.
- Correlate retries with endpoint generation so old transactions cannot absorb new responses.
References
- Microsoft Open Specifications: NTSTATUS values
- Microsoft: TDI dispatch and transport object types
- Microsoft: TDI_REQUEST structure
- Microsoft: TDI_LISTEN
- Microsoft: TDI_SEND
Looking for a different code? Search another status or error code.
