D627 - Two spellings of one condition gave the encoding

Status: measured Date: 2026-09-08

Three codes, and no way to read any of them

D617 recorded two libSceNet error codes because the value is the point: sceNetRecv answers 0x8041_0123 on a connected socket with nothing to read and 0x8041_0139 on a listening one, and whoever writes the function would otherwise invent a constant. A third arrived later - sceNetBind refusing with 0x8041_0130.

Three numbers, and nothing said what any digit of them meant. The kernel's codes are 0x8002_0000 | errno and audio's are 0x8026_0000 | errno, so by analogy these would be 0x8041_0000 | errno - which would make the errnos 0x123, 0x139 and 0x130. Those are 291, 313 and 304, and no BSD errno list has them.

The sweep exercised both layers, and recorded them side by side

The 20260908-170447 payload leg ran the same two conditions through the POSIX calls as well, and read __error() after each:

condition sceNet* errno in hex
recv, connected socket, nothing to read 0x8041_0123 35 EAGAIN 0x23
recv, listening socket 0x8041_0139 57 ENOTCONN 0x39

base = 0x8041_0100. Both fit, and the low byte is the ordinary BSD number after all - the 0x01 that looked like part of the errno is part of the base.

sceNetBind's 0x8041_0130 is consistent: 0x30 is 48, EADDRINUSE, and the POSIX bind in that same check had already bound the address. Corroborating, not confirming - nobody read that one's errno.

Why the pairing is the whole of it

Either code alone says nothing about which byte carries the errno. 0x0123 splits as 01|23 or 0|123 and there is no way to choose. It is having the same condition in two spellings from one run that fixes the split, and that only exists because the probe exercises both layers and records the raw values of each rather than a reading of them.

Nothing about this needed a new measurement. It needed two existing ones put next to each other, which is what a differential is for and what a list of three unexplained constants is not.

Recorded as a constant with a negative test

orbistoun_net::NET_ERROR_BASE, with a test reconstructing all three codes from their errnos, and a second test asserting that 0x8041_0000 | EAGAIN is not what the console answered. The negative one is the point: every other subsystem's base ends in four zero digits, so this is the value somebody will one day "correct", and the wrong version is wrong by exactly 0x100 on every code - close enough to look right in a log and never equal to what a guest compares against.

Stated at the strength the evidence supports. Two points fit a line; what would falsify it is a libSceNet code whose low byte is not a BSD errno for the condition that produced it, or one above 0x8041_01ff. Neither has been seen, and neither has been looked for.