Author: cazfi
Date: Fri Jan  1 12:24:23 2016
New Revision: 31281

URL: http://svn.gna.org/viewcvs/freeciv?rev=31281&view=rev
Log:
Improved server side bind() and friends error logging

See patch #6750

Modified:
    trunk/server/sernet.c

Modified: trunk/server/sernet.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/sernet.c?rev=31281&r1=31280&r2=31281&view=diff
==============================================================================
--- trunk/server/sernet.c       (original)
+++ trunk/server/sernet.c       Fri Jan  1 12:24:23 2016
@@ -1103,6 +1103,7 @@
   struct fc_sockaddr_list *list;
   int name_count;
   fc_errno eno = 0;
+  union fc_sockaddr *problematic = NULL;
 
 #ifdef IPV6_SUPPORT
   struct ipv6_mreq mreq6;
@@ -1124,7 +1125,7 @@
     exit(EXIT_FAILURE);
   }
 
-  cause = NULL;
+  cause = "internal"; /* If cause is not overwritten but gets printed... */
   on = 1;
 
   /* Loop to create sockets, bind, listen. */
@@ -1139,6 +1140,7 @@
        * Kernel might have disabled AF_INET6. */
       eno = fc_get_errno();
       cause = "socket";
+      problematic = paddr;
       continue;
     }
 
@@ -1170,6 +1172,7 @@
     if (bind(s, &paddr->saddr, sockaddr_size(paddr)) == -1) {
       eno = fc_get_errno();
       cause = "bind";
+      problematic = paddr;
 
       if (eno == EADDRNOTAVAIL) {
         /* Close only this socket. This address is not available.
@@ -1195,17 +1198,24 @@
     if (listen(s, MAX_NUM_CONNECTIONS) == -1) {
       eno = fc_get_errno();
       cause = "listen";
+      problematic = paddr;
       fc_closesocket(s);
       continue;
     }
-    listen_socks[listen_count] = s;
-    listen_count++;
+
+    listen_socks[listen_count++] = s;
   } fc_sockaddr_list_iterate_end;
 
   if (listen_count == 0) {
-    log_fatal("%s failed: %s", cause, fc_strerror(eno));
+    log_fatal("%s failure: %s (%d failed)", cause, fc_strerror(eno), 
name_count);
+    if (problematic != NULL) {
+      sockaddr_debug(problematic, LOG_NORMAL);
+    }
     fc_sockaddr_list_iterate(list, paddr) {
-      sockaddr_debug(paddr, LOG_DEBUG);
+      /* Do not list already logged 'problematic' again */
+      if (paddr != problematic) {
+        sockaddr_debug(paddr, LOG_DEBUG);
+      }
     } fc_sockaddr_list_iterate_end;
     exit(EXIT_FAILURE);
   }
@@ -1229,7 +1239,7 @@
 
   /* Create socket for server LAN announcements */
   if ((socklan = socket(lan_family, SOCK_DGRAM, 0)) < 0) {
-    log_error("socket failed: %s", fc_strerror(fc_get_errno()));
+    log_error("Announcement socket failed: %s", fc_strerror(fc_get_errno()));
     return 0; /* FIXME: Should this cause hard error as exit(EXIT_FAILURE).
                *        It's failure to do as commandline parameters requested 
after all */
   }
@@ -1265,7 +1275,7 @@
   }
 
   if (bind(socklan, &addr.saddr, sockaddr_size(&addr)) < 0) {
-    log_error("Lan bind failed: %s", fc_strerror(fc_get_errno()));
+    log_error("Announcement socket binding failed: %s", 
fc_strerror(fc_get_errno()));
   }
 
 #ifdef IPV6_SUPPORT
@@ -1496,8 +1506,8 @@
 #endif
 
   /* Create a socket to broadcast to client. */
-  if ((socksend = socket(AF_INET,SOCK_DGRAM, 0)) < 0) {
-    log_error("socket failed: %s", fc_strerror(fc_get_errno()));
+  if ((socksend = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+    log_error("Lan response socket failed: %s", fc_strerror(fc_get_errno()));
     return;
   }
 
@@ -1522,7 +1532,7 @@
 
   if (setsockopt(socksend, SOL_SOCKET, SO_BROADCAST, 
                  (const char*)&setting, sizeof(setting))) {
-    log_error("setsockopt failed: %s", fc_strerror(fc_get_errno()));
+    log_error("Lan response setsockopt failed: %s", 
fc_strerror(fc_get_errno()));
     return;
   }
 


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to