Repository navigation
Conversation
PS5VR (PPSA99177), Jelly5 (PPSA99505), Emby5 (PPSA99515) and Nuvio PS5 (PPSA99997) stop at this import on main. The lookup goes through host DNS like sceNetResolverStartNtoa and fills SharpProspero's 384-byte SceNetResolverInfoEx with up to ten distinct IPv4 records. Only flags 0 is handled; other flags throw. Assisted by Claude Code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DwFnKjMxmwGDWiuYYf1v4D
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
|
|
#1838 implements the same export and was opened at 21:12 (with the lookup shared with |
|
Closing in favour of #1838, which was opened first and is checked with PS5VR on Windows. Sorry for the duplicate; I missed it when I opened this. If useful for #1838, the test here checks three more things: a canary after byte 384 stays intact, the buffer is untouched on every error path ( |
… errors The layout offsets the titles read are static_asserts, and guest_sce_net now checks a canary past byte 384, distinct records, and an untouched buffer on the EINVAL, RESOLVER_ENODNS and EBADF paths, as boykopovar#1845's test did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What
Implements
sceNetResolverStartNtoaMultipleRecordsExin libSceNet. Onmainit is not exported at all, and four homebrew titles stop at it (#1578 table): PS5VR (PPSA99177), Jelly5 (PPSA99505), Emby5 (PPSA99515) and Nuvio PS5 (PPSA99997). All four use the DNS layer of EVO-PLAYER-PS5's toolkit (tools/native-app/stubs/evo_dns.c). That layer calls the function with timeout, retry and flags 0 and a zeroed buffer, then checks the result: a canary past byte 384,recordsin 1..10, and family 2 on each record.Layout: the 384-byte
SceNetResolverInfoExfollows SharpProspero:intfamily and 12 reserved bytes;records,dns4records,dns6recordsandrid6;evo_dns.creads the same offsets (records at 320, dns4 at 324, family at record + 16) and checks them on the console with its canary.static_asserts pin the size and offsets.Lookup: host DNS, as
sceNetResolverStartNtoadoes. The block is cleared, then filled with up to ten distinct IPv4 addresses in the host resolver's order, each taggedAF_INET(2).recordsanddns4recordsare the count;dns6recordsandrid6stay 0.Errors, matching the sibling:
EINVAL.EBADF.RESOLVER_ENODNSand records it forsceNetResolverGetError.Flags: only 0 is handled. shadPS4 reads 0x1000000 as AAAA and 0x2000000 as A plus AAAA, and the async flag would need a worker, so any other value throws. Timeout and retry are ignored, as in the sibling.
TechnicalDebt records the IPv4-only result, the flags, and that the layout comes from SharpProspero and EVO-PLAYER-PS5 rather than a console trace.
Overlap: #1287 implements the non-
ExsceNetResolverStartNtoaMultipleRecords. It conflicts withmainand is waiting for a title that imports it. The two functions are independent: this PR adds theExexport after that one's stub. Whichever merges second has a small textual rebase inExport.cppandGuestSceNet.cpp.Tested
guest_sce_net, extended:localhostreturns 1..10 records, each127.xwith family 2 and zeroed padding. The records are distinct, the counts match, the unused records and the reserved tail are 0, and a canary after byte 384 is untouched..invalidreturnsRESOLVER_ENODNSand sets the resolver error.EINVALwith errno 22.EBADFwith errno 9.guest_sce_netpasses. On Linux the othernet/sockettests pass too.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code
https://claude.ai/code/session_01DwFnKjMxmwGDWiuYYf1v4D