mirror of
https://github.com/Swordpdf/ProsperoEden.git
synced 2026-10-18 19:59:46 -05:00
* Validate Eden room packets and add offline interoperability checks * Bound proxy decompression and receive queues * Add asynchronous room controller and cancellable connections * Wire room settings and lifecycle into the launcher * Bound outgoing room queues and test stalled peers * Own room receive callbacks per proxy socket * Support proxy polling and release sockets between games * Retain guest sockets across descriptor changes * Record offline qualification and freeze fresh candidates * Record room server and read-only console preflight evidence * Show room members and reported games in a scrollable list * Document Tailscale capabilities and verify room rejection recovery * Record remaining hardware validation prerequisites * Record successful room transport over Tailscale * Record verified console deployment for operator testing * Use a supported keyboard type for masked password entry * Remember room passwords and report connection failures * Report ENet handshake errors and packet counts * Parse numeric room addresses before invoking the resolver * Record operator-confirmed PS5 room connection * Use the room virtual interface for guest wireless networking * Compose room interfaces with the native getifaddrs adaptation * Exercise LDN discovery and peer connection through a real room * Record PS5 Mario Kart wireless lobby validation * Record live LDN traffic, recovery and Tailscale component validation * Prepare official desktop reference and correct room interface guidance * Record public room connection and native DNS failure * Show multiplayer connection status on home and settings * Make external Tailscale qualification optional * Invalidate network compiler cache for generated room headers * Use the pinned Boost version in multiplayer host checks * Show room server ping in the game overlay * Record verified ping overlay deployment to PS5 * Respect detailed logging settings for multiplayer diagnostics * Make the room socket non-blocking on the console so the member loop can send the join request * Add public room browser beside private multiplayer connection * Keep multiplayer destination choice selectable while connected * Record local public browser validation and deferred console test * Explain multiplayer connection failures in a persistent UI panel * Define idle-only multiplayer validation on console .40 * Record console .40 public directory and private room validation * Update public room notes for PR publication * Keep the saved private room on public joins, save the private form as typed, and harden the public room list * Translate the multiplayer and public room texts in all 29 languages
23 lines
1.0 KiB
C++
23 lines
1.0 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
#pragma once
|
|
#include <fcntl.h>
|
|
#include <sys/socket.h>
|
|
|
|
namespace Eden::Multiplayer {
|
|
// ENet asks for a non-blocking socket with fcntl(O_NONBLOCK) and ignores the result. A sandboxed
|
|
// console title's libc refuses fcntl on sockets (see update_check/console_curl.c), so the room
|
|
// socket stayed blocking: enet_host_service then waits in recvmsg for the next datagram instead
|
|
// of returning after its timeout, and the member loop never gets to send the join request,
|
|
// acknowledgements or pings unless the room happens to send something that produces an event.
|
|
inline bool MakeSocketNonBlocking(int socket) {
|
|
#if defined(__PROSPERO__)
|
|
constexpr int ConsoleNonBlocking = 0x1200; // SO_NBIO, the console's own option
|
|
const int on = 1;
|
|
return setsockopt(socket, SOL_SOCKET, ConsoleNonBlocking, &on, sizeof(on)) == 0;
|
|
#else
|
|
const int flags = fcntl(socket, F_GETFL);
|
|
return flags >= 0 && fcntl(socket, F_SETFL, flags | O_NONBLOCK) == 0;
|
|
#endif
|
|
}
|
|
} // namespace Eden::Multiplayer
|