Я думаю, что вы, возможно, задумывались над проблемой.Вам не нужно прерывать вызов read()
через 2 секунды, вам просто нужна логика поддержки, чтобы понять, что через 2 секунды он не должен ожидать получения каких-либо «функциональных» команд.Тогда ваша реализация может написать следующую команду, и ваша read()
вернет байт (ы) из ответа на эту команду.
Вот так я бы подошел к этому, имея общий код, который читает вбайт и передает их дальше по цепочке, где может быть выполнена специфичная для контекста обработка.Тогда вам не нужно прерывать чтение, вышестоящий код просто должен понимать, что данные, которые он в конечном итоге возвращает, могут быть «функциональной» командой, а может и не быть.