Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is going when nfds=0 in the select() system call

Tags:

c

linux

I am debugging an application on Linux. And it has a couple of threads that are periodically calling the select system call:

strace shows:

select(0, NULL, NULL, NULL, {1, 342414})

So nfds=0. I thought that nfds is the highest file descriptor number occurring in any of the sets readfds, writefds and exceptfds incremented by one. It cannot be standard input (fd=0), because this would then have nfds=1.

So what is the meaning of nfds=0 in this case?

Thanks!

like image 660
Aris Koning Avatar asked Oct 30 '25 22:10

Aris Koning


1 Answers

Usually select sleeps until either the timeout expires, or an event occurs on one of the file descriptors. If there are no file descriptors, the timeout is the only remaining behaviour.

My local manpage for select(2) even includes the text

Some code calls select() with all three sets empty, nfds zero, and a non-NULL timeout as a fairly portable way to sleep with subsecond precision.

like image 113
Useless Avatar answered Nov 02 '25 13:11

Useless