The proper way would be to create a new implementation of the built-in online subsystem interface. You can copy the code from OnlineSubsystemNull to get started as a base, and then replace different functions (like registering, listing, and joining servers) with however you want to handle it (e.g. an https request to some master server [you’ll need to write the master server API as well]). You probably shouldn’t need to touch raw sockets at all unless you’re doing something weird, there’s built in APIs for most networking tasks that are cross platform.