If the server never responds to our keepalive pings, we don't do anything. Instead, we should tear the connection down. I think this means that wocky_porter_force_close_async() needs a reason parameter saying why it's happened, to allow Gabble to explain what happened to the user when the connection vanishes from underneath it. We could also use g_socket_set_timeout() on the underlying GSocketConnection, but this would depend on WockyXmppConnection knowing that its GIOStream is actually a GSocketConnection. That seems okay to me. In fact, this is what Loudmouth did: it blindly sent keepalive pings, and depended on the socket dying to kill the connection. It seemed to work. But I don't know how this interacts with proxies. I guess maybe we'd still need to do the application-level timeouts in that case.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.