diff -ruN -Xfreeciv-lan/diff_ignore freeciv-cvs-Nov-23/client/clinet.c freeciv-lan/client/clinet.c
--- freeciv-cvs-Nov-23/client/clinet.c	2003-11-22 22:07:46.000000000 -0800
+++ freeciv-lan/client/clinet.c	2003-11-25 19:25:46.000000000 -0800
@@ -24,6 +24,9 @@
 #ifdef HAVE_ARPA_INET_H
 #include <arpa/inet.h>
 #endif
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
 #ifdef HAVE_NETINET_IN_H
 #include <netinet/in.h>
 #endif
@@ -777,6 +780,14 @@
   to the request-packet sent from the client. 
 **************************************************************************/
 struct server_list *get_lan_server_list(void) {
+
+# if defined(__VMS) && !defined(_DECC_V4_SOURCE)
+    size_t fromlen;
+# else
+    int fromlen;
+# endif
+  struct sockaddr_in fromend;
+  struct hostent *from;
   char msgbuf[128];
   int type;
   struct data_in din;
@@ -786,11 +797,30 @@
   char status[256];
   char players[256];
   char metastring[1024];
+  fd_set readfs, exceptfs;
+  struct timeval tv;
+
+  FD_ZERO(&readfs);
+  FD_ZERO(&exceptfs);
+  FD_SET(socklan, &exceptfs);
+  FD_SET(socklan, &readfs);
+  tv.tv_sec = 0;
+  tv.tv_usec = 0;
+
+  if (select(socklan + 1, &readfs, NULL, &exceptfs, &tv) == -1) {
+    freelog(LOG_ERROR, "select failed: %s", mystrerror(errno));
+  }
+
+  if (!FD_ISSET(socklan, &readfs)) {
+    return FALSE;
+  }
 
   dio_input_init(&din, msgbuf, sizeof(msgbuf));
+  fromlen = sizeof(fromend);
 
   /* Try to receive a packet from a server. */ 
-  if (0 < recvfrom(socklan, msgbuf, sizeof(msgbuf), 0, NULL, NULL)) {
+  if (0 < recvfrom(socklan, msgbuf, sizeof(msgbuf), 0,
+                   (struct sockaddr *) &fromend, &fromlen)) {
     struct server *pserver =
                 (struct server*)fc_malloc(sizeof(struct server));
 
@@ -805,6 +835,12 @@
     dio_get_string(&din, players, sizeof(players));
     dio_get_string(&din, metastring, sizeof(metastring));
 
+    if (!mystrcasecmp("none", servername)) {
+      from = gethostbyaddr((char *)&fromend.sin_addr, 
+                           sizeof(fromend.sin_addr), AF_INET);
+      sz_strlcpy(servername, inet_ntoa(fromend.sin_addr));
+    }
+
     /* UDP can send duplicate or delayed packets. */
     server_list_iterate(*lan_servers, aserver) {
       if (!mystrcasecmp(aserver->name, servername) 
diff -ruN -Xfreeciv-lan/diff_ignore freeciv-cvs-Nov-23/server/sernet.c freeciv-lan/server/sernet.c
--- freeciv-cvs-Nov-23/server/sernet.c	2003-11-22 22:08:00.000000000 -0800
+++ freeciv-lan/server/sernet.c	2003-11-25 19:23:57.000000000 -0800
@@ -978,17 +978,32 @@
   char msgbuf[128];
   struct data_in din;
   int type;
+  fd_set readfs, exceptfs;
+  struct timeval tv;
 
-  if (0 < recvfrom(socklan, msgbuf, sizeof(msgbuf), 0, NULL, NULL)) {
-    dio_input_init(&din, msgbuf, 1);
-    dio_get_uint8(&din, &type);
-    if (type == SERVER_LAN_VERSION) {
-      freelog(LOG_DEBUG, 
-              "Received request for server LAN announcement.");
-      send_lanserver_response(); 
-    } else {
-      freelog(LOG_DEBUG,
-              "Received invalid request for server LAN announcement.");
+  FD_ZERO(&readfs);
+  FD_ZERO(&exceptfs);
+  FD_SET(socklan, &exceptfs);
+  FD_SET(socklan, &readfs);
+
+  tv.tv_sec = 0;
+  tv.tv_usec = 0;
+
+  if (select(socklan + 1, &readfs, NULL, &exceptfs, &tv) == -1) {
+    freelog(LOG_ERROR, "select failed: %s", mystrerror(errno));
+  }
+
+  if (FD_ISSET(socklan, &readfs)) {
+    if (0 < recvfrom(socklan, msgbuf, sizeof(msgbuf), 0, NULL, NULL)) {
+      dio_input_init(&din, msgbuf, 1);
+      dio_get_uint8(&din, &type);
+      if (type == SERVER_LAN_VERSION) {
+        freelog(LOG_DEBUG, "Received request for server LAN announcement.");
+        send_lanserver_response();
+      } else {
+        freelog(LOG_DEBUG,
+                "Received invalid request for server LAN announcement.");
+      }
     }
   }
 }
@@ -1039,12 +1054,11 @@
     return;
   }
 
+  /* Create a description of server state to send to clients.  */
   if (my_gethostname(hostname, sizeof(hostname)) != 0) {
-    freelog(LOG_ERROR, "gethostname failed: %s", mystrerror(errno));
-    return;
+    sz_strlcpy(hostname, "none");
   }
 
-  /* Create a description of server state to send to clients.  */
   my_snprintf(version, sizeof(version), "%d.%d.%d%s",
               MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION, VERSION_LABEL);
 
