| Previous | Next |
| EPROTONOSUPPORT | EREMOTEIO |
ENODATA
This page examines UCRT compatibility status: no message or data available. The Microsoft C runtime reported the POSIX-supplement ENODATA value; it is an errno-layer result and is not automatically the underlying Win32 GetLastError code.
Historical and API context
Microsoft C runtime compatibility: Ucrt compatibility status: no message or data available is exposed by the Microsoft CRT compatibility layer. _doserrno and the immediately preceding CRT call can preserve the Win32 or runtime condition summarized by errno. The wording attached to this errno is a clue to the original interface, not proof that a similarly named modern subsystem returned it.
Reconstruct the returning call
| Evidence | Question it answers |
|---|---|
| CRT function, return value, errno, _doserrno, descriptor/socket, and library version. | Ties this error to one live API object instead of a translated message. |
| Thread-local errno captured before another CRT call changes it. | Shows whether this error arose in the caller ABI, wrapper, or provider. |
| Paired Win32 handle/socket state and the actual CRT descriptor conversion. | Preserves the first boundary before errno can be overwritten. |
| Known-good call using the same UCRT build and calling convention. | Provides a same-platform known-good comparison. |
A small reproduction
- Compare the same call after producing one message/data item. Keep the binary, header ABI, and provider fixed.
- Log errno with _get_errno and _doserrno at the immediate failure site. Record whether the control reaches the same syscall or runtime boundary as this error.
- Verify the numeric value against the target UCRT header rather than a Unix table. A changed errno after this test is a new boundary, not another spelling of this error.
Two observations are especially discriminating here: CRT function, return value, errno, _doserrno, descriptor/socket, and library version. Use this control for comparison: compare the same call after producing one message/data item.
Portability traps
| Tempting assumption | Safer interpretation |
|---|---|
| The English phrase is assumed to be portable | ENODATA belongs to Microsoft C runtime compatibility; verify the target headers and returning API before applying another platform's errno table |
| A retry succeeded and erased the original evidence | A retry can replace the original errno with a different state; preserve the first call, numeric value, and object generation beforehand |
Correction and acceptance
Targeted correction. Handle the empty-data condition in the CRT contract and preserve _doserrno when OS detail is needed.
Regression proof. The program distinguishes empty data from EOF, timeout, and Win32 failure.
Technical references
- Microsoft: errno constants — defines the status namespace used.
- Microsoft: _get_errno — documents the API or lifecycle boundary behind this error.
- Microsoft: _doserrno and errno — provides ABI, implementation, or protocol context.
- The Open Group: errno.h — supports the portability and verification limits.
Looking for a different code? Search another status or error code.
