MCPcopy Index your code
hub / github.com/assaultcube/AC / servermsinit

Function servermsinit

source/src/serverms.cpp:329–372  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

327}
328
329void servermsinit(bool listen)
330{
331 if(scl.master && *scl.master) copystring(mastername, scl.master);
332 usemaster = !listen || (listen && scl.master && scl.ssk && scl.maxclients <= MAXCLIENTSONMASTER); // true: connect to master, false: LAN-only server
333 if(scl.maxclients > MAXCLIENTSONMASTER) mlog(ACLOG_WARNING, "maxclient exceeded: cannot register");
334 disconnectmaster();
335
336 if(listen)
337 {
338 ENetAddress address = { ENET_HOST_ANY, (enet_uint16) CUBE_SERVINFO_PORT(scl.serverport) };
339 if(*scl.ip)
340 {
341 if(enet_address_set_host(&address, scl.ip) < 0) mlog(ACLOG_WARNING, "server ip \"%s\" not resolved", scl.ip);
342 else serveraddress.host = address.host;
343 }
344
345 pongsock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM);
346 if(pongsock != ENET_SOCKET_NULL && enet_socket_bind(pongsock, &address) < 0)
347 {
348 enet_socket_destroy(pongsock);
349 pongsock = ENET_SOCKET_NULL;
350 }
351 if(pongsock == ENET_SOCKET_NULL) fatal("could not create server info socket");
352 else enet_socket_set_option(pongsock, ENET_SOCKOPT_NONBLOCK, 1);
353
354 address.port = CUBE_SERVINFO_PORT_LAN;
355 lansock = enet_socket_create(ENET_SOCKET_TYPE_DATAGRAM);
356 if(lansock != ENET_SOCKET_NULL && (enet_socket_set_option(lansock, ENET_SOCKOPT_REUSEADDR, 1) < 0 || enet_socket_bind(lansock, &address) < 0))
357 {
358 enet_socket_destroy(lansock);
359 lansock = ENET_SOCKET_NULL;
360 }
361 if(lansock == ENET_SOCKET_NULL) mlog(ACLOG_WARNING, "could not create LAN server info socket");
362 else enet_socket_set_option(lansock, ENET_SOCKOPT_NONBLOCK, 1);
363 }
364 if(!usemaster){
365 mlog(ACLOG_INFO, "server is LAN-only - without connection to masterserver");
366 if(listen){
367 if(!scl.ssk) mlog(ACLOG_INFO, "ACTION REQUIRED: you must provide a PRIVATE SERVER KEY via the '-Y' command line argument");
368 if(!scl.master) mlog(ACLOG_INFO, "LAN-only because no master is given");
369 if(scl.maxclients>MAXCLIENTSONMASTER) mlog(ACLOG_INFO, "LAN-only because too many clients for master");
370 }
371 }
372}

Callers 1

initserverFunction · 0.85

Calls 9

copystringFunction · 0.85
mlogFunction · 0.85
disconnectmasterFunction · 0.85
fatalFunction · 0.70
enet_address_set_hostFunction · 0.50
enet_socket_createFunction · 0.50
enet_socket_bindFunction · 0.50
enet_socket_destroyFunction · 0.50
enet_socket_set_optionFunction · 0.50

Tested by

no test coverage detected