I am having problems with an automated software testing, which is blaming use of freed resource when I use fd_clr(3) after using close(3) in a fd. Is there something wrong with doing this?
for(i = 0; i < nfds; ++i) { if (FD_ISSET(i, &myFdSet)) { close(i); FD_CLR(i, &myFdSet); } }
Advertisement
Answer
FD_CLR()
only changes a local fd_set
, which is a C data structure to store info about a list of file descriptors.
close()
is a system call that closes the file descriptor.
The fd_set
is used in the select()
system call. With select()
you get information about the state of the list of file descriptors that are stored in your fd_set
struct.
The reason why you see the FD_CLR()
just below the close()
, is that there’s no longer need/purpose in asking the state if the closed file descriptor.