Files
BlackBearReloaded c2b50141fd Local wireless multiplayer through Eden rooms (#101)
* 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
2026-10-11 01:02:48 -04:00

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