仕組み自体は元からある程度入れてあったので細かい部分を考えてちょこちょこと。基本的なスタンスとしてはselectするときにキャンセルされているかどうかをチェックしてキャンセルされていたらタイムアウトしたのと同じような扱いにすることにしました。非同期にしたりするのは面倒なので、一秒ごとにselectを呼び出すような形にしてしまいました。
でもって、キャンセルされてから5秒以内はエラーにならないキャンセルしか効かないようにして、5秒以内にキャンセルできなかったらエラーにしてでもキャンセルするという形にしました。
といっても、別ブランチで作業中なので、マージするのは2.9.15を出した後ですね。