Added guard to avoid that the idle timeout expires just before sending the request. Reworked the way idle timeouts are handled, to support the case where the idle timeout just expired and the request can be tried on a different connection/channel.