Есть ли в Poco правильный способ прервать блокирующую операцию ввода-вывода из другого потока?
Да, вы можете вызвать Socket :: shutdown (). Что произойдет после этого, зависит от вашей платформы, когда recv () вернет Poco сгенерирует соответствующее исключение.
Но вам не нужно блокировать ввод-вывод, чтобы начать с него, поскольку Poco :: Net :: Socket :: setBlocking (bool) включает или отключает блокировку. Или, даже если вы хотите сделать блокировку, вы все равно можете определить время ожидания, используя Poco :: Net :: Socket :: setSendTimeout () или Poco :: NetSocket :: setReceiveTimeout ()
Так как поток, выполняющий ввод / вывод, будет заблокирован, я не вижу прямого способа отменить его, кроме того, что он является грязным и явно уничтожает поток. Это, однако, не рекомендуется