Description
I have encountered a problem with reconnecting from the client side. The reconnectable block is triggered only before the first successful connection.
Here is a minimal example that reproduces the problem.
If the server is initially offline, the reconnectable block is called until a successful connection. But if the server is restarted after a successful connection, the connection is no longer restored, the reconnectable block is not called.
It looks like the problem is on the client side in io.rsocket.kotlin.connection.KeepAliveHandler
The coroutine is suspended on outbound.sendKeepAlive(true, EmptyBuffer, 0) and can no longer complete when keepAlive.maxLifetimeMillis is exceeded. If you look deeper, it looks like the frame is sent to the io.rsocket.kotlin.transport.internal.PrioritizationFrameQueue#priorityFrames channel, it looks like it just overflows, which leads to the suspension of the coroutine. I tried to move the logic for sending to a child coroutine - this solves the problem