[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 265064] connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 06 Jul 2022 15:06:03 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=265064 Bug ID: 265064 Summary: connect(2): unexpected EADDRINUSE when connecting from IPv6 wildcard to IPv4 address Product: Base System Version: Unspecified Hardware: Any OS: Any Status: New Severity: Affects Some People Priority: --- Component: kern Assignee: net@FreeBSD.org Reporter: dmgk@freebsd.org I'm trying to get to the bottom of the Go issue reported in [1] and noticed some differences in the bind(2)/connect(2) behavior between IPv4/IPv6 and IPv4-mapped addresses. I wrote a small C reproducer [2] to isolate the issue. When the available port range is exhausted, both IPv4->IPv4 and IPv6->IPv6 clients fail to bind(2) with EADDRNOTAVAIL, which is expected: $ sysctl net.inet.ip.portrange.first=10000 $ sysctl net.inet.ip.portrange.last=10001 $ ./localdial -4 server4: listening on 0.0.0.0:10001 server6: listening on :::10001 client4: connecting 0.0.0.0:0 -> 127.0.0.1:10001 client4: connected 127.0.0.1:10000 -> 127.0.0.1:10001 server4: accepted 127.0.0.1:10000 -> 0.0.0.0:10001 client4: connecting 0.0.0.0:0 -> 127.0.0.1:10001 localdial: client4: bind: Can't assign requested address $ ./localdial -6 server4: listening on 0.0.0.0:10001 server6: listening on :::10001 client6: connecting :::0 -> ::1:10001 client6: connected ::1:10000 -> ::1:10001 client6: connecting :::0 -> ::1:10001 server6: accepted ::1:10000 -> :::10001 localdial: client6: bind: Can't assign requested address With IPv4-mapped address, the behavior is different: $ sysctl net.inet.ip.portrange.first=10000 $ sysctl net.inet.ip.portrange.last=10001 $ ./localdial -M server4: listening on 0.0.0.0:10001 server6: listening on :::10001 client6: connecting :::0 -> ::ffff:127.0.0.1:10001 client6: connected ::ffff:127.0.0.1:10000 -> ::ffff:127.0.0.1:10001 server4: accepted 127.0.0.1:10000 -> 0.0.0.0:10001 client6: connecting :::0 -> ::ffff:127.0.0.1:10001 client6: connected ::ffff:127.0.0.1:10000 -> ::ffff:127.0.0.1:10001 server4: accepted 127.0.0.1:10000 -> 0.0.0.0:10001 client6: connecting :::0 -> ::ffff:127.0.0.1:10001 localdial: client6: connect: Address already in use Here, the client successfully does bind(2) but then fails at connect(2) with EADDRINUSE, which looks surprising. This seems to confuse the Go testing suite and leads to [1]. Is this an expected/known issue? Reproducible on all FreeBSD versions from 12.3-RELEASE to 14.0-CURRENT. [1] https://github.com/golang/go/issues/34264 [2] https://github.com/dmgk/localdial -- You are receiving this mail because: You are the assignee for the bug.