Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Jun 2022 12:40:11 -0400
From:      Chris Ross <cross+freebsd@distal.com>
To:        freebsd-net@freebsd.org, freebsd-transport@freebsd.org
Subject:   Troubles with adding IPv6 support to a program
Message-ID:  <AFA64D16-9FE9-42BF-AB5B-732F474037AB@distal.com>

next in thread | raw e-mail | index | archive | help

Tl;dr;
I don=E2=80=99t know why I=E2=80=99m getting an EINVAL from a call to =
bind for a second socket




20 years ago, I spent a lot of time adding IPv6 support to IPv4-only =
programs.
So I thought this (adding IPv6 support to simpleproxy[1]) would be an =
easy
project to pick up.  I=E2=80=99ve gotten most of the framework in, =
delayed only
slightly when I learned that FreeBSD is =E2=80=9Cdifferent=E2=80=9D in =
not routing IPv4
traffic to AF_INET6 sockets [2].

However, I=E2=80=99m getting an issue from one of my bind(2) calls that =
I=E2=80=99m not able
to figure out.  I was hoping someone else had a few minutes to take a =
quick
look and help me find out what I=E2=80=99m doing wrong.

A ~70 line relevant section of the source is at =
https://justpaste.it/6u3jd

The tl;dr; of this is that I:

* getaddrinfo(NULL, portIwant)
* for each address returned:
 * create a socket
 * setsockopt(SO_REUSEADDR)
 * bind
 * listen

The first address I get is IPv6 localhost, and that binds and listens, =
then
continues to the next address.  A new socket is created, setsockopt=E2=80=99=
d, but
bind for the second address (IPv4 localhost) fails with EINVAL.

As you can see in the code shared, I have lots of debugging logs in the =
code,
and it looks like everything is as it should be.  I=E2=80=99m probably =
just missing
Something simple, and am looking for another set of eyes.

Thanks all.  Contact me off list if you like, or on-list if it=E2=80=99s =
obvious
what I=E2=80=99ve done and it will help others.

              - Chris


[1] https://github.com/vzaliva/simpleproxy
[2] inet6(4), "Interaction between IPv4/v6 sockets"=




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AFA64D16-9FE9-42BF-AB5B-732F474037AB>