Author: cazfi Date: Fri Jan 1 12:24:29 2016 New Revision: 31282 URL: http://svn.gna.org/viewcvs/freeciv?rev=31282&view=rev Log: Improved server side bind() and friends error logging
See patch #6750 Modified: branches/S2_6/server/sernet.c Modified: branches/S2_6/server/sernet.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/sernet.c?rev=31282&r1=31281&r2=31282&view=diff ============================================================================== --- branches/S2_6/server/sernet.c (original) +++ branches/S2_6/server/sernet.c Fri Jan 1 12:24:29 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())); } #ifndef IPV6_SUPPORT @@ -1500,8 +1510,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; } @@ -1526,7 +1536,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