You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
libkernel: poll throws 'descriptor 3 is not a socket' for a pipe descriptor (ProsperoTV) #3584
ProsperoTV (PPSA99003) stops right after its menu opens, on maina11c8f7 (Windows 11, RTX 4070, catalog build with eboot.bin and sce_module/libc.prx unwrapped):
[debug:0] [TV] menu open session=1
[libc] unhandled exception 'St13runtime_error' thrown from 00007ffa0d4efe86
terminate called after throwing an instance of 'std::runtime_error'
what(): poll: descriptor 3 is not a socket
The title writes this to its own log (download0/profiles/10000000/logs/app.log). The console shows only the entry-point line and exit 0xc0000409.
poll (Socket/src/Udp.cpp:868) accepts only socket descriptors (>= GuestSockets::FirstDescriptor, 0x10000000) and throws for anything else. Descriptor 3 here comes from pipe:
pipe (File/src/Stdio.cpp:380) returns the host C-runtime descriptors from _pipe/pipe, which start at 3;
the executable imports pipe once, next to socketpair, select, and poll (9 call sites);
ProsperoTV's own sources (blackbearreloaded/ProsperoTV) don't call poll, so it comes from a library linked into the title. A wakeup pipe polled together with sockets (as curl's multi interface does) fits.
On FreeBSD, poll on a pipe reports POLLIN when data is buffered or the write end is closed (POLLHUP), and POLLOUT when there is room. Supporting this means poll has to wait on a mix of socket and pipe descriptors with one timeout. On Linux the host descriptors can go to the native poll as they are. On Windows, CRT pipes can't be waited on with WSAPoll, so it needs another readiness check (for example PeekNamedPipe on the read end) or a different pipe implementation.
Closing as a duplicate of #3521: same throw, poll: descriptor N is not a socket (Socket/src/Udp.cpp:907). #3649 and #3644 both fix it; whichever merges covers PPSA99009 too.
Activity
reyani-dev commentedon Oct 11, 2026
A second title reaches this: ProsperoLichess (PPSA99009), once its two earlier stops are fixed (mspace alignment, #3639, then
kern.arandom):(Its own log,
download0/prosperolichess/app.log, Windows 11, onmaina11c8f7 plus those two changes.)oneandonlydean commentedon Oct 12, 2026
Closing as a duplicate of #3521: same throw,
poll: descriptor N is not a socket(Socket/src/Udp.cpp:907). #3649 and #3644 both fix it; whichever merges covers PPSA99009 too.