Linux will let you bind to IPv6 and automatically translate any IPv4 packets. However, Windows doesn't?
Additionally, the client currently dials DNS and chooses the first entry. Not only might it be the wrong protocol (we should check), but the server might not actually be listening on that IP.
Unfortunately, I think we should implement happy-eyeballs. Race the IPv4 and IPv6 connections over separate IPv4/IPv6 sockets.