+ if (hostname == NULL)
+ {
+ // if no hostname given, try to auto-detect network server in local network
+ // by doing a UDP broadcast on the network server port and wait for answer
+
+ SDLNet_SocketSet udp_socket_set = SDLNet_AllocSocketSet(1);
+ if (!udp_socket_set)
+ Error(ERR_EXIT, "SDLNet_AllocSocketSet() failed: %s"), SDLNet_GetError();
+
+ udp = SDLNet_UDP_Open(0);
+ if(!udp)
+ Error(ERR_EXIT, "SDLNet_UDP_Open() failed: %s", SDLNet_GetError());
+
+ if (SDLNet_UDP_AddSocket(udp_socket_set, udp) == -1)
+ Error(ERR_EXIT_NETWORK_SERVER, "SDLNet_TCP_AddSocket() failed: %s"),
+ SDLNet_GetError();
+
+ char *data_ptr = "network server UDB broadcast";
+ int data_len = strlen(data_ptr) + 1;
+ IPaddress ip_address;
+
+ SDLNet_Write32(0xffffffff, &ip_address.host); /* 255.255.255.255 */
+ SDLNet_Write16(port, &ip_address.port);
+
+ UDPpacket packet =
+ {
+ -1,
+ (Uint8 *)data_ptr,
+ data_len,
+ data_len,
+ 0,
+ ip_address
+ };
+
+ SDLNet_UDP_Send(udp, -1, &packet);
+
+ Error(ERR_DEBUG, "doing UDP broadcast for local network server ...");
+
+ if (SDLNet_CheckSockets(udp_socket_set, 1000) == 1)
+ {
+ int num_packets = SDLNet_UDP_Recv(udp, &packet);
+
+ if (num_packets == 1)
+ {
+ Error(ERR_DEBUG, "network server found");
+
+ server_host = SDLNet_Read32(&packet.address.host);
+ }
+ else
+ {
+ Error(ERR_DEBUG, "no answer from network server");
+ }
+ }
+ else
+ {
+ Error(ERR_DEBUG, "no network server found");
+ }
+ }
+