What does errno 99 (ENOSTR) in Mac mean?

 
Could be also:
ConstantTypeOS
EADDRNOTAVAILerrnoLinux
ENOPROTOOPTerrnoSolaris
SECURITY1_INITIALIZATION_FAILEDBugCheck CodeWindows
Previous Next
EADDRNOTAVAIL ENOPROTOOPT

ENOSTR

This page examines Darwin descriptor is not a STREAM. A STREAMS-specific ioctl or operation was issued on a descriptor that does not represent a STREAM.

Historical and API context

Darwin BSD system-call handling: Darwin descriptor is not a stream belongs to Darwin errno and should be decoded with the exact SDK or XNU header used by the target. Darwin extensions and legacy STREAMS names related to this error can differ in availability or numbering on other UNIX-like systems. The wording attached to ENOSTR is a clue to the original interface, not proof that a similarly named modern subsystem returned it.

Reconstruct the returning call

EvidenceQuestion it answers
Descriptor provenance, fstat type, open path, operation, and module expectation.Ties this error to one live API object instead of a translated message.
Darwin errno value and the SDK/XNU header version used to decode it.Shows whether this error arose in the caller ABI, wrapper, or provider.
First syscall/ioctl return plus process, thread, and object generation.Preserves the first boundary before errno can be overwritten.
Known-good object of the same class on the same macOS build.Provides a same-platform known-good comparison.

A small reproduction

  1. Open the intended STREAM endpoint and repeat the minimal ioctl. Keep the binary, header ABI, and provider fixed.
  2. Capture errno immediately and compare the paired return value. Record whether the control reaches the same syscall or runtime boundary as this error.
  3. Repeat with one controlled object while keeping identity and sandbox unchanged. A changed errno after this test is a new boundary, not another spelling of this error.

Two observations are especially discriminating here: Descriptor provenance, fstat type, open path, operation, and module expectation. Use this control for comparison: open the intended STREAM endpoint and repeat the minimal ioctl.

Portability traps

Tempting assumptionSafer interpretation
The English phrase is assumed to be portableENOSTR belongs to Darwin BSD system-call handling; verify the target headers and returning API before applying another platform's errno table
A retry succeeded and erased the original evidenceA 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. Validate descriptor type and route ordinary files/sockets to their native APIs.

Regression proof. The application rejects wrong descriptor classes locally and the intended stream operation succeeds.

Technical references


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