timeoutMillis: Long,
    clock: () -> Long = { System.currentTimeMillis() })

It provides ability to cancel jobs and schedule coroutine with timeout. Unlike regular withTimeout this implementation is never scheduling timer tasks but only checks for current time. This makes timeout measurement much cheaper and doesn’t require any watchdog thread.

There are two limitations:

The last one limitation is generally unacceptable however in the particular use-case (closing IDLE connection) it is just fine as we really don’t care about stalling IDLE connections if there are no more incoming