Я сейчас делаю просто функцией select с интервалом 1 секунда, если сообщение не пришло то закрываю соединение. Но мне кажется это какой-то неправильный подход..
Что-то я не пойму, вы как приходящие данные читаете, в слоте присоединенном к сигналу readyRead? Или как?
Где вы select используете? Он уже в ядре Qt выполняется и через специальный механизм QSocketNotifier используется.