dirname-lgpl
environ
fclose
+fcntl
fcntl-h
ffs
fnmatch
}
+int virNetClientGetFD(virNetClientPtr client)
+{
+ int fd;
+ virNetClientLock(client);
+ fd = virNetSocketGetFD(client->sock);
+ virNetClientUnlock(client);
+ return fd;
+}
+
+
+int virNetClientDupFD(virNetClientPtr client, bool cloexec)
+{
+ int fd;
+ virNetClientLock(client);
+ fd = virNetSocketDupFD(client->sock, cloexec);
+ virNetClientUnlock(client);
+ return fd;
+}
+
+
void virNetClientFree(virNetClientPtr client)
{
int i;
void virNetClientRef(virNetClientPtr client);
+int virNetClientGetFD(virNetClientPtr client);
+int virNetClientDupFD(virNetClientPtr client, bool cloexec);
+
int virNetClientAddProgram(virNetClientPtr client,
virNetClientProgramPtr prog);
#include <unistd.h>
#include <sys/wait.h>
#include <signal.h>
+#include <fcntl.h>
#ifdef HAVE_NETINET_TCP_H
# include <netinet/tcp.h>
}
+int virNetSocketDupFD(virNetSocketPtr sock, bool cloexec)
+{
+ int fd;
+
+ if (cloexec)
+ fd = fcntl(sock->fd, F_DUPFD_CLOEXEC);
+ else
+ fd = dup(sock->fd);
+ if (fd < 0) {
+ virReportSystemError(errno, "%s",
+ _("Unable to copy socket file handle"));
+ return -1;
+ }
+ return fd;
+}
+
+
bool virNetSocketIsLocal(virNetSocketPtr sock)
{
bool isLocal = false;
virNetSocketPtr *addr);
int virNetSocketGetFD(virNetSocketPtr sock);
+int virNetSocketDupFD(virNetSocketPtr sock, bool cloexec);
+
bool virNetSocketIsLocal(virNetSocketPtr sock);
int virNetSocketGetPort(virNetSocketPtr sock);