NET_CreateServer(3)

πŸ“¦
version 3.2.0 Β· 2 versions
, in fedora 43, fedora 44

✨ NET_CreateServer ✨

okay bestie, welcome to the SDL_net 3 manual, page NET_CreateServer(3) πŸ’– this one's literally the "let me be the one everyone connects to" moment, main character energy fr fr πŸ‘‘


🌸 NAME 🌸

NET_CreateServer β€” create a server, which listens for connections to accept. no cap, that's the whole job description πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

#include <SDL3_net/SDL_net.h>

NET_Server * NET_CreateServer(NET_Address *addr, Uint16 port, SDL_PropertiesID props);

#define NET_PROP_SERVER_REUSEADDR_BOOLEAN     "NET.server.reuseaddr"

πŸ’œ DESCRIPTION πŸ’œ

okay so first, vocab check πŸ“š An app that initiates connection to a remote computer is called a "client," and the thing the client connects to is called a "server." that's it, that's the dynamic πŸ’…

Servers listen for and accept connections from clients, which spawns a new stream socket on the server's end, which it can then send/receive data on. cute, right? 🫢

Use this function to create a server that will accept connections from other systems. 🌈

This function does not block, and is not asynchronous, as the system can decide immediately if it can create a server or not. So if this returns success, you can immediately start accepting connections. iconic behavior honestly ⭐

You can specify an address to listen for connections on; this address must be local to the system, and probably one returned by NET_GetLocalAddresses(), but almost always you just want to specify NULL here, to listen on any address available to the app. like, just let it cook πŸ”₯

After creating a server, you get stream sockets to talk to incoming client connections by calling NET_AcceptClient(). 🧚

Stream sockets don't employ any protocol (above the TCP level), so they can accept connections from clients that aren't using SDL_net, but if you want to speak any protocol beyond an abritrary stream of bytes, such as HTTP, you'll have to implement that yourself on top of the stream socket. yes bestie, the HTTP is a you problem, the library said good luck πŸ™ˆ

Unlike BSD sockets or WinSock, you specify the port as a normal integer; you do not have to byteswap it into "network order," as the library will handle that for you. we love a library that does the annoying part for us πŸ’–

The caller may supply properties to customize behavior. This is optional, and a value of zero for props will request defaults for all properties.

These are the supported properties: πŸ‘‡

  • NET_PROP_SERVER_REUSEADDR_BOOLEAN: true if the server should be created even if a previous server has recently used this address. For various reasons, networks prefer that there be some delay between apps reusing the same address, but this can be problematic when iterating quickly, for software development purposes or just restarting a crashed service. This property defaults to true (although it should be noted that, at the operating system level, this defaults to false!). If this property is false and the OS feels that not enough time has elapsed, server creation will fail and this function will report an error. 😭
bestie note the plot twist: SDL_net defaults this to true, but the OS-level default is false. do not get it twisted πŸ’€

πŸŽ€ FUNCTION PARAMETERS πŸŽ€

  • addr β€” the local address to listen for connections on, or NULL.
  • port β€” the port on the local address to listen for connections on.
  • props β€” properties of the new server. Specify zero for defaults.

⭐ RETURN VALUE ⭐

Returns a new NET_Server, or NULL on error; call SDL_GetError() for details. and when it errors you WILL be calling SDL_GetError(), that's not a suggestion that's a lifestyle πŸ’…


πŸ’… THREAD SAFETY πŸ’…

It is safe to call this function from any thread. yes queen, thread-safe, go off in parallel πŸ‘‘


🌈 AVAILABILITY 🌈

This function is available since SDL_net 3.0.0. so if you're on something older, sorry babe 😭


🫢 SEE ALSO 🫢


and that's the whole page, bestie!! ✨ this was SDL_net 3.2.0 (the SDL_net manual, mwah πŸ’‹) β€” go create a server, accept some clients, and remember: NULL for addr is almost always the move. periodt πŸŽ€πŸ’–

πŸ“¦ where this page comes from