是否可以使用select()在无限循环中使用nanosleep?

时间:2009-10-11 16:14:58

标签: c select for-loop sleep

我有一个 C 程序,它使用for(;;)循环和select()从/向socket发送操作以监视文件描述符。我还需要这个程序每80毫秒发送一个数据包到一个数据包,我该如何实现呢? 也许我可以使用fork()并且子进程只需在{80}每隔80毫秒监视一个文件描述符中写一个ack。 有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

调用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毫秒并发送所需的数据包非常容易。