Comment 11 for bug 1346431

Revision history for this message
Chris Knadle (chris-knadle) wrote :

I think I've found a workaround, though it defies logic. In /etc/mumble-server.ini set:

   host=::

which will work for both IPv6 and IPv4 -- or to limit use to only IPv4, use a setting of:

   host=0.0.0.0

[This works on Debian with mumble-1.2.8-2 at least.]

The reason this makes no sense is that this is exactly what murmurd tries to do in

src/murmur/Meta.cpp:234:
---------------------------------------------------------------------
      if (hasipv6) {
         qlBind << QHostAddress(QHostAddress::AnyIPv6);
#ifdef Q_OS_UNIX
         if (hasipv4) {
            int s = ::socket(AF_INET6, SOCK_STREAM, 0);
                if (s != -1) {
                   int ipv6only = 0;
                   socklen_t optlen = sizeof(ipv6only);
                   if (getsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
&ipv6only, &optlen) == 0) {
                      if (ipv6only == 0)
                          hasipv4 = false;
                   }
                   close(s);
               }
         }
#endif
      }
      if (hasipv4)
         qlBind << QHostAddress(QHostAddress::Any);
      }
---------------------------------------------------------------------

The "Any" and "AnyIPv6" addresses are supposed to mean "0.0.0.0" and
"::" like one would expect:

   http://doc.qt.io/qt-4.8/qhostaddress.html#SpecialAddress-enum

I went through the effort of creating a systemd service file with a Wants=network-online.target and After=network-online.target and unfortunately that doesn't seem to help this in the least, so it's likely that an upstart service file wouldn't help either.

For reference, the Debian bug is #780300:
   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=780300