+ if (SDLNet_UDP_AddSocket(udp_socket_set, udp) == -1)
+ Fail("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);
+
+ DrawNetworkText("Looking for nearby network server ...");
+
+ // wait for any nearby network server to answer UDP broadcast
+ for (i = 0; i < 5; i++)
+ {
+ if (SDLNet_CheckSockets(udp_socket_set, 0) == 1)
+ {
+ int num_packets = SDLNet_UDP_Recv(udp, &packet);
+
+ if (num_packets == 1)
+ {
+ char message[100];
+
+ server_host = SDLNet_Read32(&packet.address.host);
+
+ sprintf(message, "Network server found at %d.%d.%d.%d!",
+ (server_host >> 24) & 0xff,
+ (server_host >> 16) & 0xff,
+ (server_host >> 8) & 0xff,
+ (server_host >> 0) & 0xff);
+
+ DrawNetworkText_Success(message);
+ }
+ else
+ {
+ DrawNetworkText_Failed("No answer from network server!");
+ }
+
+ break;
+ }
+ else
+ {
+ Delay_WithScreenUpdates(100);
+ }
+ }
+
+ if (server_host == 0)
+ DrawNetworkText_Failed("No nearby network server found!");