The timeout mechanism in ser-unix.c was changed in commit 048094acc. In do_hardwire_readchar(), the required timeout is broken into 1 second intervals and wait_for() is called. Before, wait_for() set VTIME and VMIN so the read would block, but now it uses select() to block for the specified timeout. If wait_for() returns SERIAL_TIMEOUT, do_hardwire_readchar() returns immediately, so the timeout is always only 1s. The attached patch will repeatedly call wait_for() until the full timeout has elapsed. Gareth