It is possible to bind only on
:: and talk both IPv4 and IPv6. I have wondered why some applications, including openssh, do not take advantage of this.
This section about IPv6 in the FreeBSD developers' handbook has some interesting commentary that may be relevant:
It looks that RFC2553 talks too little on wildcard bind issue,
especially on the port space issue, failure mode and relationship
between AF_INET/INET6 wildcard bind. There can be several separate
interpretation for this RFC which conform to it but behaves
differently. So, to implement portable application you should assume
nothing about the behavior in the kernel. Using getaddrinfo(3) is the
safest way. Port number space and wildcard bind issues were discussed
in detail on ipv6imp mailing list, in mid March 1999 and it looks that
there is no concrete consensus (means, up to implementers). You may
want to check the mailing list archives.
We may also speculate that this default behavior was defined when a significant number of systems did not have IPv6 support.