The F_DUPFD_CLOEXEC functionality is not available on
some platformms. We must thus explicitly call the
virSetCloexec function once we remove GNULIB's equiv
fix for this.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/rpc/virnetsocket.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index 687099720f..906b5165eb 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -1403,15 +1403,27 @@ int virNetSocketDupFD(virNetSocketPtr sock, bool cloexec)
{
int fd;
+#ifdef F_DUPFD_CLOEXEC
if (cloexec)
fd = fcntl(sock->fd, F_DUPFD_CLOEXEC, 0);
else
+#endif /* F_DUPFD_CLOEXEC */
fd = dup(sock->fd);
if (fd < 0) {
virReportSystemError(errno, "%s",
_("Unable to copy socket file handle"));
return -1;
}
+#ifndef F_DUPFD_CLOEXEC
+ if (cloexec &&
+ virSetCloseExec(fd < 0)) {
+ int saveerr = errno;
+ closesocket(fd);
+ errno = saveerr;
+ return -1;
+ }
+#endif /* F_DUPFD_CLOEXEC */
+
return fd;
}
--
2.24.1