close() can be interrupted with undefined behavior Lassi Kortela 21 Jul 2019 11:44 UTC

"POSIX close(2) is broken", Colin Percival and Taylor Campbell, 2011.
<http://www.daemonology.net/blog/2011-12-17-POSIX-close-is-broken.html>

Apparently POSIX close() can cause EINTR and leave the file descriptor
in an unknown state :D I mean:

int
threadunsafe_close(int fd)
{
     if (close(fd) == 0)
         return (0);
     if (errno != EINTR)
         return (-1);
     while (close(fd)) {
         if (errno == EBADF)
             return (0);
         if (errno != EINTR)
             return (-1);
     }
     return (0);
}

And the thread- and signal-safe version is worse.

Let that sink in.