Возможно ли использовать nanosleep в бесконечном цикле с select ()? - PullRequest
0 голосов
/ 11 октября 2009

У меня есть программа C , которая выполняет операции recv / send из / в сокет, используя цикл for(;;) и select() для контроля дескриптора файла. Мне также нужна эта программа для отправки пакета каждые 80 мсек, как я могу это реализовать? Может быть, я могу использовать fork(), и дочерний процесс просто записывает подтверждение в один из дескрипторов файлов, отслеживаемых select() каждые 80 мсек. Есть ли лучшие решения?

1 Ответ

3 голосов
/ 11 октября 2009

При вызове select () вы можете использовать аргумент timeout для ограничения времени ожидания выбора.

 struct timeval {
           long    tv_sec;         /* seconds */
           long    tv_usec;        /* microseconds */
       };

int select(int nfds, fd_set *readfds, fd_set *writefds,
              fd_set *exceptfds, struct timeval *timeout);

Довольно просто ограничить время ожидания до 80 мсек и отправить требуемый пакет.

...