You can set maximum time select() is listening. When the time passes, it stops and you can do all pending actions and then run select again. In fact most programs work this way. The only thing is to set the time in select to fit your program.
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
The interesting parameters is the last one - timeout.