# HG changeset patch # User Matt Harbison # Date 1728357609 14400 # Node ID 997c9b2069d160d19cf464ac7f770cae50bc4d99 # Parent 629ecced55a6d2b59a158ffeb2f36bc979939dcd zeroconf: fix an invalid argument error on Windows The idea that pyoxidizer was triggering the problem when standing up the previous incarnation of CI for Windows was misleading- it was a Windows problem in general. See the inline bug link. Unfortunately, there's no commit referenced there, and it looks like OP closed the report himself with the suggested workaround. IOW, very modern python may not work, but it's extremely unlikely that there are any users of this extension, especially on Windows. diff -r 629ecced55a6 -r 997c9b2069d1 hgext/zeroconf/Zeroconf.py --- a/hgext/zeroconf/Zeroconf.py Sat Oct 12 16:55:30 2024 -0400 +++ b/hgext/zeroconf/Zeroconf.py Mon Oct 07 23:20:09 2024 -0400 @@ -232,6 +232,16 @@ # implementation classes +_SOL_IP = socket.SOL_IP + +if pycompat.iswindows: + # XXX: Not sure if there are newer versions of python where this would fail, + # but apparently socket.SOL_IP used to be 0, and socket.IPPROTO_IP is 0, so + # this would work with older versions of python. + # + # https://github.com/python/cpython/issues/101960 + _SOL_IP = socket.IPPROTO_IP + class DNSEntry: """A DNS entry""" @@ -1419,8 +1429,8 @@ # work as expected. # pass - self.socket.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_TTL, b"\xff") - self.socket.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, b"\x01") + self.socket.setsockopt(_SOL_IP, socket.IP_MULTICAST_TTL, b"\xff") + self.socket.setsockopt(_SOL_IP, socket.IP_MULTICAST_LOOP, b"\x01") try: self.socket.bind(self.group) except Exception: @@ -1428,7 +1438,7 @@ # SO_REUSEADDR and SO_REUSEPORT have been set, so ignore it pass self.socket.setsockopt( - socket.SOL_IP, + _SOL_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(_MDNS_ADDR) + socket.inet_aton('0.0.0.0'), ) @@ -1844,7 +1854,7 @@ self.engine.notify() self.unregisterAllServices() self.socket.setsockopt( - socket.SOL_IP, + _SOL_IP, socket.IP_DROP_MEMBERSHIP, socket.inet_aton(_MDNS_ADDR) + socket.inet_aton('0.0.0.0'), ) diff -r 629ecced55a6 -r 997c9b2069d1 tests/test-hgrc.t --- a/tests/test-hgrc.t Sat Oct 12 16:55:30 2024 -0400 +++ b/tests/test-hgrc.t Mon Oct 07 23:20:09 2024 -0400 @@ -304,15 +304,6 @@ config error at $TESTTMP/.hg/hgrc:3: [broken [255] -XXX-PYOXIDIZER Pyoxidizer build have trouble with zeroconf for unclear reason, -we accept the bad output for now as this is the last thing in the way of -testing the pyoxidizer build. - -#if no-pyoxidizer-in-filesystem $ HGRCSKIPREPO=1 hg paths --config extensions.zeroconf= foo = $TESTTMP/bar -#else - $ HGRCSKIPREPO=1 hg paths --config extensions.zeroconf= - abort: An invalid argument was supplied (known-bad-output !) - [255] -#endif + diff -r 629ecced55a6 -r 997c9b2069d1 tests/test-paths.t --- a/tests/test-paths.t Sat Oct 12 16:55:30 2024 -0400 +++ b/tests/test-paths.t Mon Oct 07 23:20:09 2024 -0400 @@ -140,21 +140,11 @@ zeroconf wraps ui.configitems(), which shouldn't crash at least: -XXX-PYOXIDIZER Pyoxidizer build have trouble with zeroconf for unclear reason, -we accept the bad output for now as this is the last thing in the way of -testing the pyoxidizer build. - -#if no-pyoxidizer-in-filesystem $ hg paths --config extensions.zeroconf= dupe = $TESTTMP/b#tip dupe:pushurl = https://example.com/dupe expand = $TESTTMP/a/$SOMETHING/bar insecure = http://foo:***@example.com/ -#else - $ hg paths --config extensions.zeroconf= - abort: An invalid argument was supplied (known-bad-output !) - [255] -#endif $ cd ..