I run a few different apps on a Windows 10 PC at home which are accessible from the Internet using Dynamic DNS and I've been reconfiguring them all to support both IPv6 and IPv4 and got most of them working fine.

Calibre is the last one I need to do, but I am having problems making it work with both IPv4 and IPv6 at the same time.

If I change "the interface on which to listen for connections" setting in the "Sharing over the Net -> advanced" settings to "::", then it listens happily on IPv6 and is fully accessible both from my own network and externally using IPv6. However, it doesn't seem to be listening on IPv4 and access from any non-IPv6 enabled client doesn't work.

If I revert the setting back to None, then IPv4 works, but IPv6 doesn't.

I'm running 3.37.0.

Has anyone else got this working or got any suggestions of how to fix it?

The interface on which to listen for connections. The default is to listen on all available interfaces. You can change this to, for example, "127.0.0.1" to only listen for connections from the local machine, or to "::" to listen to all incoming IPv6 and IPv4 connections.

It might seem strange, but why enable IP6 at all? Poorer security, more bugs and there is nothing I know of using IP6 not available on IP4.
Few domestic router/modems have any IP6 security settings, so every IP6 device on your LAN is visible to all the usual privacy thieves.
I know we are theoretically running out of IP4, but we won't for a long time as US Gov, Universities and big US corps have 10s or 100s of millions of unused or wasted IP4.

IP6 still needs more work.
Even privacy was a fudged after thought.
There is no reason to use it unless you are paid tester, or Facebook, Google etc wanting to acquire more personal & private info.
Disabling IP6 on everything is more secure, less buggy, faster and everything works.

Thanks for your view (and apologies for taking this further off topic)

I don't necessarily agree that IPv6 has poorer security, just different issues to IPv4 - the main problem lies in where IPv6 is just turned on without proper configuration. I do accept that enabling both protocols does expose a higher risk given the code behind each is different and therefore they have different vulnerabilities.

I took the decision to adopt IPv6 to be future-ready but as some devices, ISPs and even some household-name cloud infra providers are lagging behind on its adoption, I want to offer both until I can eventually turn off IPv4.

My internet gateway has separate firewall rules for IPv4 and IPv6, so only the devices and ports I choose are accessible from the Internet.

It should say all available interfaces in one protocol family. Basically, the server has a single listening socket. A single socket can listen on either single interface or all interfaces in one protocol. It cannot as far as I know listen on multiple protocols.

The interface on which to listen for connections. The default is to listen on all available interfaces. You can change this to, for example, "127.0.0.1" to only listen for connections from the local machine, or to "::" to listen to all incoming IPv6 and IPv4 connections.

That's window specific, calibre has to work on multiple OSes, and I dont knwo of a robust cross-platform way to do dual stack sockets. There are various issues with various incompatible dual-stack implementations.

Actually, I was wrong, turns out I had already written the code to enable dual-stack sockets on all platforms, it just was not working on windows because of a bug in python, will be fixed in next release.