Have a look here
Multiplexing with curses.
You need to treat the signals as another stream of input.
A common technique I use is to create a pipe and include it as one of the input sources in a select(...) loop, in the signal handler I write a single byte to the pipe (usually the signum) and in the event loop I read the pipe.
This avoids all the messyness of missing signals or interrupt system calls. All the signals end up queued in the pipe ready to be read following the select.