On Wed, Apr 22, 2020 at 11:02:47AM +0200, Michael Tuexen wrote: > > On 22. Apr 2020, at 10:38, Matt Caswell <matt@xxxxxxxxxxx> wrote: > > > > > > > > On 21/04/2020 23:45, Michael Tuexen wrote: > >>> Looks like the failing call is here: > >>> > >>> if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, > >>> (const void *)&on, sizeof(on)) != 0) { > >> Can you provide a pointer to the code? > > > > Yes, its here: > > > > https://github.com/openssl/openssl/blob/fa555aa8970260c3e198d91709b2d4b3e40f8fa8/crypto/bio/b_sock2.c#L267-L282 > OK. Thanks. > > Could it be that on == 0, when you do the setsockopt() call? Disabling IPV6_V6ONLY seems not to be supported > on OpenBSD: Yes: if (BIO_ADDR_family(addr) == AF_INET6) { /* * Note: Windows default of IPV6_V6ONLY is ON, and Linux is OFF. * Therefore we always have to use setsockopt here. */ on = options & BIO_SOCK_V6_ONLY ? 1 : 0; if (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const void *)&on, sizeof(on)) != 0) { So something is calling BIO_listen without setting BIO_SOCK_V6_ONLY in options. All calling functions really should set BIO_SOCK_V6_ONLY if they actually support multiple sockets, and they should. Kurt