What does errno 120 (ENODATA) mean?

 
Could be also:
ConstantTypeOS
ERROR_CALL_NOT_IMPLEMENTEDWin32 errorWindows
EISNAMerrnoLinux
EPROTONOSUPPORTerrnoSolaris
PHASE0_EXCEPTIONBugCheck CodeWindows
Previous Next
EPROTONOSUPPORT EREMOTEIO

ENODATA

This page examines UCRT compatibility status: no message or data available. The Microsoft C runtime reported the POSIX-supplement this result 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 result is a clue to the original interface, not proof that a similarly named modern subsystem returned it.

Microsoft documents that some errno constants exist for UNIX compatibility and that errno is not necessarily the operating-system error code. Preserve both layers during diagnosis.

Reconstruct the returning call

EvidenceQuestion 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.

Capture errno immediately after the failing call that produced This result before formatting, tracing, allocation, or cleanup code runs. For It retain the function return value as well because many C interfaces signal failure there and use errno only as secondary detail.

A small reproduction

  1. Compare the same call after producing one message/data item. Keep the binary, header ABI, and provider fixed.
  2. 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.
  3. 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. For This result those two observations separate a stale identifier or unsupported request from a provider-wide failure without broad changes to the host.

Portability traps

Tempting assumptionSafer interpretation
The English phrase is assumed to be portablethis error 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 evidenceThe retry can replace this error with a different state; preserve the first call, numeric value, and object generation beforehand

If a wrapper converts It to an exception or Boolean, instrument below that wrapper. For It the decisive record is the syscall, ioctl, CRT function, or compatibility entry point that first exposed the value.

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. Verify one supported boundary case and one deliberate negative case so handling of It remains explicit.

Technical references

References for Microsoft C runtime compatibility it on the deployed platform version.


Looking for a different code? Search another status or error code.