You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using a link-scope ipv6 address (based on hardware address and only addressable from the link neighbours, not globally), I have to specify the interface to bind. After looking at #3993 (which I believe was looking at a related issue), I tried this:
(this is the link-local ipv6 address on the network interface of another machine on the same LAN, which works over IPv4).
I expected the following
It should have successfully bound to the eth0 interface and made the connection, but instead I got the following:
* Trying [fe80::928d:xxff:fexx:xxxx]:8080...
* Local Interface eth0 is ip fe80::ec4:xxff:fexx:xxx%2 using address family 10
* Name 'fe80::ec4:xxff:fexx:xxx' family 10 resolved to 'fe80::ec4:xxff:fexx:xxx' family 10
* bind failed with errno 22: Invalid argument
* Failed to connect to fe80::928d:xxff:fexx:xxxx port 8080 after 0ms: Failed binding local connection end
* closing connection #0
curl: (45) bind failed with errno 22: Invalid argument
I suspect it is trying to bind to the local interface with an ipv4 socket even though the address and protocol for the remote end is ipv6, but I don't really know (hence why the reference to #3993 ).
I know the connection is working as ping6 -I eth0 fe80::928d:xxff:fexx:xxxx binds and sends/receives the packets.
possible workaround
I can work around this --interface specification by using the interface scope in the URI - this works as expected:
curl -vg -6 'http://[fe80::928d:xxff:fexx:xxxx%eth0]:8080/healthz'* Trying [fe80::928d:xxff:fexx:xxxx]:8080...
* Connected to fe80::928d:xxff:fexx:xxxx (fe80::928d:xxff:fexx:xxxx) port 8080
> GET /healthz HTTP/1.1
> Host: [fe80::928d:xxff:fexx:xxxx]:8080
> User-Agent: curl/8.9.1
> Accept: */*>* Request completely sent off
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: application/json
< Date: Wed, 04 Sep 2024 11:04:38 GMT
<
{"healthy":true}
* Connection #0 to host fe80::928d:xxff:fexx:xxxx left intact
I did this
When using a link-scope ipv6 address (based on hardware address and only addressable from the link neighbours, not globally), I have to specify the interface to bind. After looking at #3993 (which I believe was looking at a related issue), I tried this:
curl --interface eth0 -vg -6 'http://[fe80:928d:xxff:fexx:xxxx]:8080/healthz'
(this is the link-local ipv6 address on the network interface of another machine on the same LAN, which works over IPv4).
I expected the following
It should have successfully bound to the
eth0
interface and made the connection, but instead I got the following:I suspect it is trying to bind to the local interface with an ipv4 socket even though the address and protocol for the remote end is ipv6, but I don't really know (hence why the reference to #3993 ).
I know the connection is working as
ping6 -I eth0 fe80::928d:xxff:fexx:xxxx
binds and sends/receives the packets.possible workaround
I can work around this
--interface
specification by using the interface scope in the URI - this works as expected:curl/libcurl version
curl 8.9.1 (x86_64-pc-linux-gnu) libcurl/8.9.1 OpenSSL/1.0.2k-fips zlip/1.2.7 OpenLDAP/2.4.44
Release-Date 2024-07-31
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IPv6 Largefile libz NTLM SSL threadsafe UnixSockets
operating system
Linux hostname 3.10.0-1160.81.1.el7.x86_64 #1 SMP
CentOS Linux release 7.9.2009 (Core)
This is the same with both the system-provided curl and the latest curl that I built from source.
The text was updated successfully, but these errors were encountered: