select call takes more time than the given timeout

Victor Buciuc victor.buciuc at gmail.com
Fri May 17 08:49:38 EDT 2013


On Fri, May 17, 2013 at 2:59 PM, devendra.aaru <devendra.aaru at gmail.com>wrote:

> Hello,
>
>
> The Select system call has given the timeout of 100 msec and but its
> expired after 115 msecs.
>
> I have no fds to read, and just wanted to use select as the timer to
> timeout and so some stuff after the timeout happen.
>
> code:
>
> #include <stdio.h>
> #include <sys/stat.h>
> #include <sys/types.h>
> #include <sys/select.h>
>
> main()
> {
>          int ret;
>
>          struct timeout tv;
>
>          tv.tv_sec = 0;
>          tv.tv_usec = 100000;
>
>         while (1) {
>          ret = select(5, 0, 0, 0, &tv);
>          if (ret == 0) {
>             struct timeval t;
>              gettimeofday(&t, 0);
>
>             printf("sec = %d-usec = %d\n", t.tv_sec, t.tv_usec);
>          }
>         }
> }
>
>
> my kernel is older, 2.6.23.
>
>
> thanks,
>

As the manual page for select specifies (see below) you should expect some
delays due to kernel scheduling. If you need more precision you might wanna
try something else.

The *timeout* argument specifies the minimum interval that *select*()
should block waiting for a file descriptor to become ready. (This interval
will be rounded up to the system clock granularity, and kernel scheduling
delays mean that the blocking interval may overrun by a small amount.) If
both fields of the *timeval* structure are zero, then *select*() returns
immediately. (This is useful for polling.) If *timeout* is NULL (no
timeout), *select*() can block indefinitely.

Regards,
Victor.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20130517/dc70e365/attachment.html 


More information about the Kernelnewbies mailing list