Author: cazfi
Date: Wed Oct 14 17:31:10 2015
New Revision: 30074

URL: http://svn.gna.org/viewcvs/freeciv?rev=30074&view=rev
Log:
Use ip_mreqn structure as option for IP_ADD_MEMBERSIP setsockopt() if available.

See patch #6409

Modified:
    trunk/client/servers.c
    trunk/configure.ac
    trunk/server/sernet.c

Modified: trunk/client/servers.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/client/servers.c?rev=30074&r1=30073&r2=30074&view=diff
==============================================================================
--- trunk/client/servers.c      (original)
+++ trunk/client/servers.c      Wed Oct 14 17:31:10 2015
@@ -352,7 +352,11 @@
 #else  /* HAVE_WINSOCK */
   char buffer[MAX_LEN_PACKET];
 #endif /* HAVE_WINSOCK */
+#ifdef HAVE_IP_MREQN
+  struct ip_mreqn mreq4;
+#else
   struct ip_mreq mreq4;
+#endif
   const char *group;
   size_t size;
   int family;
@@ -452,7 +456,12 @@
 #endif /* IPv6 support */
   {
     fc_inet_aton(group, &mreq4.imr_multiaddr, FALSE);
-    mreq4.imr_interface.s_addr = htonl(INADDR_ANY);
+#ifdef HAVE_IP_MREQN
+    mreq4.imr_address.s_addr = htonl(INADDR_ANY);
+    mreq4.imr_ifindex = 0;
+#else
+     mreq4.imr_interface.s_addr = htonl(INADDR_ANY);
+#endif
 
     if (setsockopt(scan->sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                    (const char*)&mreq4, sizeof(mreq4)) < 0) {

Modified: trunk/configure.ac
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/configure.ac?rev=30074&r1=30073&r2=30074&view=diff
==============================================================================
--- trunk/configure.ac  (original)
+++ trunk/configure.ac  Wed Oct 14 17:31:10 2015
@@ -1168,6 +1168,10 @@
 AC_MSG_CHECKING(for working gettimeofday)
   FC_CHECK_GETTIMEOFDAY_RUNTIME(,AC_DEFINE([HAVE_GETTIMEOFDAY], [1],
        [Define if the gettimeofday function works and is sane.]),)
+
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <netinet/in.h>]],
+[[struct ip_mreqn req; req.imr_ifindex = 0;]])],
+[AC_DEFINE([HAVE_IP_MREQN], [1], [struct ip_mreqn available])])
 
 dnl Check for extra socket libraries.
 dnl If the AC_CHECK_FUNCS check finds the function, we don't look any

Modified: trunk/server/sernet.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/server/sernet.c?rev=30074&r1=30073&r2=30074&view=diff
==============================================================================
--- trunk/server/sernet.c       (original)
+++ trunk/server/sernet.c       Wed Oct 14 17:31:10 2015
@@ -1084,7 +1084,11 @@
 {
   /* setup socket address */
   union fc_sockaddr addr;
+#ifdef HAVE_IP_MREQN
+  struct ip_mreqn mreq4;
+#else
   struct ip_mreq mreq4;
+#endif
   const char *cause, *group;
   int j, on, s;
   int lan_family;
@@ -1269,7 +1273,12 @@
 #endif /* IPV6 Support */
   if (addr.saddr.sa_family == AF_INET) {
     fc_inet_aton(group, &mreq4.imr_multiaddr, FALSE);
-    mreq4.imr_interface.s_addr = htonl(INADDR_ANY);
+#ifdef HAVE_IP_MREQN
+    mreq4.imr_address.s_addr = htonl(INADDR_ANY);
+    mreq4.imr_ifindex = 0;
+#else
+     mreq4.imr_interface.s_addr = htonl(INADDR_ANY);
+#endif
 
     if (setsockopt(socklan, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                    (const char*)&mreq4, sizeof(mreq4)) < 0) {


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

Reply via email to