This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
*_cloexec() I/O functions
authorZefram <zefram@fysh.org>
Tue, 19 Dec 2017 09:38:37 +0000 (09:38 +0000)
committerZefram <zefram@fysh.org>
Fri, 22 Dec 2017 16:05:33 +0000 (16:05 +0000)
commitf9821aff984443d5ac38188fab7a9b12dd3cb09c
tree3c5edf367178409501e425dac4fd4d132d136e3d
parent5c7252f4f5c37bd8a9754b1d9f1f2a95310d1fe7
*_cloexec() I/O functions

New functions PerlLIO_dup_cloexec(), PerlLIO_dup2_cloexec(),
PerlLIO_open_cloexec(), PerlLIO_open3_cloexec(), PerlProc_pipe_cloexec(),
PerlSock_socket_cloexec(), PerlSock_accept_cloexec(), and
PerlSock_socketpair_cloexec() each do the same thing as their
"_cloexec"-less counterpart, but return with the FD_CLOEXEC flag set on
each new file descriptor.  They set the flag atomically as part of the
file descriptor creation syscall where possible, but will fall back to
setting it separately from creation where necessary.

In all cases, setting the flag atomically depends not only on the correct
syscall interface being defined, but on it being actually implemented
in the runtime kernel.  Each function will experiment to see whether
the atomic flag setting actually works, and is prepared for the flag to
cause EINVAL or ENOSYS or to be ignored.
doio.c
embed.fnc
embed.h
metaconfig.h
proto.h