For anyone using the DHCPv6 client app (be.mygod.dhcpv6client) on a recent version of Android, here's something that might save you some frustration - I learned it the hard way.
In theory, you'd only need the app to run occasionally if your leasetimes are reasonably long, so it's tempting to try and save battery by not exempting it from background restrictions. I figured I'd be clever and rig up a trigger to fire it every day plus whenever I reconnected to the network, which is probably cheaper than running a separate app constantly. And lo and behold, my wifi just couldn't hold a connection anymore.
After a lot of troubleshooting, it turns out that, when the app is killed off by the system, the underlying library removes any addresses it's acquired. On its face, this doesn't seem so bad, as the network should revert to IPv4-only after those addresses are removed. But it gets worse: because you stop receiving IPv6 traffic immediately, but the connectivity check takes a while to invalidate the cached IPv6 address it's monitoring, Android will interpret the fact that it's no longer receiving responses as evidence that the network failed. So your phone disconnects from the wifi - and if the whole cycle triggers on every connection, you'll never get more than about a minute of connectivity before it all comes crashing down.
So as far as I can tell, there's no alternative but to exempt it from background restrictions, and leave it running constantly even though you only need it to exchange a couple packets with the router every 24 hours. If anyone figures out a way to overcome this, I'd love to hear about it. Otherwise, I hope this helps someone else facing similar frustrations.