Создайте набор файловых дескрипторов (FD_SET), который включает STDIN, а также сокет, который вы пытаетесь прочитать, затем используйте select () на наборе. Примерно так:
int main(int argc, char **argv)
{
fd_set fds;
int fd = open(/* your socket */);
struct timeval tv;
FD_ZERO(&fds);
FD_SET(STDIN_FILENO, &fds);
FD_SET(fd, &fds);
while (1) {
tv.tv_sec = 1; // wait for up to 1 sec
int retval = select(2, &fds, NULL, NULL, &tv);
if (retval > 0) {
if (FD_ISSET(STDIN_FILENO, &fds))
// process stdin
else if (FD_ISSET(fd, &fds))
// process data from your socket
} else if (retval == 0)
// timeout
else
// some error
}
exit 0;
}
(Обратите внимание, я не компилировал это, но вы должны понять.)
См. fd_set и выберите учебник