The check_close function

#include "/package/prog/prjlibs/include/check_close.h"

type_status check_close(type_fd fd);

{
  if (check_close(fd)!=0) perror("close failed");
}

The check_close() function is a wrapper around close(), closing a file descriptor. POSIX says that if a signal is caught, close() can return -1 with EINTR, and the file descriptor may or may not be closed. So naively retrying after EINTR may result in -1 with EBADF if the descriptor was actually closed the first time. check_close() retries after EINTR, but will not produce a spurious EBADF.

Note that retrying after EINTR is not appropriate in a multithreaded program that opens and closes descriptors from more than one thread and catches signals. If close() fails with EINTR but the descriptor was actually closed, then it's possible that another thread could open a new file with the same descriptor number, which would then be closed on a retry.

To link your program with the check_close function, add /package/prog/prjlibs/library/check_close.a to the end of the link command line.