May be a possible solution is to set more reasonable timeouts (hmm, seconds) and then handle errors after Read operations? If there is a timeout error after read operation - then retry again. May be - if the communication syntax allows - you can just supervise the serial input buffer and reading it if something occurs (looking for user "stop" event also) .
Hope this helps.