Commit c980fc65 authored by Max Kellermann's avatar Max Kellermann

fd_util: add function socketpair_cloexec()

parent 36782a97
...@@ -174,6 +174,30 @@ pipe_cloexec_nonblock(int fd[2]) ...@@ -174,6 +174,30 @@ pipe_cloexec_nonblock(int fd[2])
#endif #endif
} }
#ifndef WIN32
int
socketpair_cloexec(int domain, int type, int protocol, int sv[2])
{
int ret;
#ifdef SOCK_CLOEXEC
ret = socketpair(domain, type | SOCK_CLOEXEC, protocol, sv);
if (ret >= 0 || errno != EINVAL)
return ret;
#endif
ret = socketpair(domain, type, protocol, sv);
if (ret >= 0) {
fd_set_cloexec(sv[0], true);
fd_set_cloexec(sv[1], true);
}
return ret;
}
#endif
int int
socket_cloexec_nonblock(int domain, int type, int protocol) socket_cloexec_nonblock(int domain, int type, int protocol)
{ {
......
...@@ -65,6 +65,17 @@ pipe_cloexec(int fd[2]); ...@@ -65,6 +65,17 @@ pipe_cloexec(int fd[2]);
int int
pipe_cloexec_nonblock(int fd[2]); pipe_cloexec_nonblock(int fd[2]);
#ifndef WIN32
/**
* Wrapper for socketpair(), which sets the CLOEXEC flag (atomically
* if supported by the OS).
*/
int
socketpair_cloexec(int domain, int type, int protocol, int sv[2]);
#endif
/** /**
* Wrapper for socket(), which sets the CLOEXEC and the NONBLOCK flag * Wrapper for socket(), which sets the CLOEXEC and the NONBLOCK flag
* (atomically if supported by the OS). * (atomically if supported by the OS).
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment