Author: cazfi Date: Fri Jan 1 12:24:35 2016 New Revision: 31283 URL: http://svn.gna.org/viewcvs/freeciv?rev=31283&view=rev Log: Improved server side bind() and friends error logging
See patch #6750 Modified: branches/S2_5/server/sernet.c branches/S2_5/utility/netintf.c branches/S2_5/utility/netintf.h Modified: branches/S2_5/server/sernet.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_5/server/sernet.c?rev=31283&r1=31282&r2=31283&view=diff ============================================================================== --- branches/S2_5/server/sernet.c (original) +++ branches/S2_5/server/sernet.c Fri Jan 1 12:24:35 2016 @@ -1079,6 +1079,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; @@ -1100,7 +1101,7 @@ exit(EXIT_FAILURE); } - cause = NULL; + cause = "internal"; /* If cause is not overwritten but gets printed... */ on = 1; /* Loop to create sockets, bind, listen. */ @@ -1115,6 +1116,7 @@ * Kernel might have disabled AF_INET6. */ eno = fc_get_errno(); cause = "socket"; + problematic = paddr; continue; } @@ -1124,7 +1126,7 @@ (char *)&on, sizeof(on)) == -1) { log_error("setsockopt SO_REUSEADDR failed: %s", fc_strerror(fc_get_errno())); - sockaddr_debug(paddr); + sockaddr_debug(paddr, LOG_DEBUG); } #endif /* HAVE_WINSOCK */ @@ -1137,7 +1139,7 @@ (char *)&on, sizeof(on)) == -1) { log_error("setsockopt IPV6_V6ONLY failed: %s", fc_strerror(fc_get_errno())); - sockaddr_debug(paddr); + sockaddr_debug(paddr, LOG_DEBUG); } #endif /* IPV6_V6ONLY */ } @@ -1146,6 +1148,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. @@ -1171,17 +1174,21 @@ 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); + sockaddr_debug(paddr, LOG_DEBUG); } fc_sockaddr_list_iterate_end; exit(EXIT_FAILURE); } @@ -1205,7 +1212,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 */ } @@ -1241,7 +1248,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 @@ -1479,8 +1486,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; } @@ -1505,7 +1512,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; } Modified: branches/S2_5/utility/netintf.c URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_5/utility/netintf.c?rev=31283&r1=31282&r2=31283&view=diff ============================================================================== --- branches/S2_5/utility/netintf.c (original) +++ branches/S2_5/utility/netintf.c Fri Jan 1 12:24:35 2016 @@ -257,20 +257,20 @@ /*************************************************************************** Write information about sockaddr to debug log. ***************************************************************************/ -void sockaddr_debug(union fc_sockaddr *addr) +void sockaddr_debug(union fc_sockaddr *addr, enum log_level lvl) { #ifdef IPV6_SUPPORT char buf[INET6_ADDRSTRLEN] = "Unknown"; if (addr->saddr.sa_family == AF_INET6) { inet_ntop(AF_INET6, &addr->saddr_in6.sin6_addr, buf, INET6_ADDRSTRLEN); - log_debug("Host: %s, Port: %d (IPv6)", - buf, ntohs(addr->saddr_in6.sin6_port)); + log_base(lvl, "Host: %s, Port: %d (IPv6)", + buf, ntohs(addr->saddr_in6.sin6_port)); return; } else if (addr->saddr.sa_family == AF_INET) { inet_ntop(AF_INET, &addr->saddr_in4.sin_addr, buf, INET_ADDRSTRLEN); - log_debug("Host: %s, Port: %d (IPv4)", - buf, ntohs(addr->saddr_in4.sin_port)); + log_base(lvl, "Host: %s, Port: %d (IPv4)", + buf, ntohs(addr->saddr_in4.sin_port)); return; } #else /* IPv6 support */ @@ -279,8 +279,8 @@ buf = inet_ntoa(addr->saddr_in4.sin_addr); - log_debug("Host: %s, Port: %d", - buf, ntohs(addr->saddr_in4.sin_port)); + log_base(lvl, "Host: %s, Port: %d", + buf, ntohs(addr->saddr_in4.sin_port)); return; } Modified: branches/S2_5/utility/netintf.h URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_5/utility/netintf.h?rev=31283&r1=31282&r2=31283&view=diff ============================================================================== --- branches/S2_5/utility/netintf.h (original) +++ branches/S2_5/utility/netintf.h Fri Jan 1 12:24:35 2016 @@ -131,7 +131,7 @@ enum fc_addr_family family, char *net_interface, bool not_avail_ok); -void sockaddr_debug(union fc_sockaddr *addr); +void sockaddr_debug(union fc_sockaddr *addr, enum log_level lvl); int sockaddr_size(union fc_sockaddr *addr); bool sockaddr_ipv6(union fc_sockaddr *addr); _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits