poll does not have a frequency of polling unless you misuse it by passing a timeout. It sleeps until there's data.
Conversation
The issue is that connections often break in practice without notifying you, so you need to regularly wake up and send some data both to keep the connection from being killed and to make sure that it hasn't died yet. It's particularly bad with most mobile data connections.
2
poll should return with an exceptional condition if the socket dies. If it doesn't this is a problem the OS should solve; it's trivial to do if you can see the connection go down/up again.
1
1
Connections die pretty quickly if you aren't sending anything through them on mobile networks and you don't receive reliable notice of that. OS doesn't know about it either and the device is generally asleep when this happens. Need to decide how often to wake to keep them going.
2
Is this NAT-hell only? In principle it shouldn't happen on a real IPv6 network, which we'll hopefully be able to assume in a few years...
1
An IPv6 network without stateful firewalls shouldn't have this issue, but stateful firewalls will still end up dropping old / inactive connections. There's also just a whole lot of broken stuff. I think there are a lot of pure IPv6 mobile networks already and it still happens.
2
Why would you put stateful firewalls on an IPv6 network with millions of nodes? Do they just *want* to burn money and spew CO2?
1
I don't know what they are doing or why, but carriers love dropping connections. *shrug*
2
en.wikipedia.org/wiki/Carrier-g is definitely the main issue, but IPv6 definitely isn't 100% reliable either. The code really needs to be designed to actively figure this out.
1
Shouldn't TCP keepalive at the kernel level be able to handle it?
1
The device goes to sleep though and that's not going to wake it up. The only way it could work is if it was offloaded to hardware that kept running. It's totally possible that exists, I don't know.
But kernel can and *should* schedule periodic wakeups just to do stuff like keepalive. Unlike gigantic userspace apps it could do it very efficiently.
2
My point is that this could all be made to work correctly with standard APIs (poll) and no GCM mediation hell, without lost or seriously delayed messages, if the kernel (and its configuration) were doing its job and making the standard APIs work the way they're supposed to.
1
Show replies
It needs to be set up to wake up the device when something goes wrong and keep it awake via a wakelock long enough to set up the new connection. It's the kind of complex policy that the kernel doesn't really want to deal with as a general rule.

