]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Add a virNetSocketNewConnectSockFD method
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 23 Sep 2013 10:58:26 +0000 (11:58 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 24 Sep 2013 08:37:26 +0000 (09:37 +0100)
To allow creation of a virNetSocketPtr instance from a pre-opened
socketpair FD, add a virNetSocketNewConnectSockFD method.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
src/libvirt_private.syms
src/rpc/virnetsocket.c
src/rpc/virnetsocket.h

index 7665c3a12bb152f946c994800fbe832f3cf3a89b..1ecee4c2fdf883c9e5bb2e3b947b788e9fbb8473 100644 (file)
@@ -1011,6 +1011,7 @@ virNetSocketLocalAddrString;
 virNetSocketNewConnectCommand;
 virNetSocketNewConnectExternal;
 virNetSocketNewConnectLibSSH2;
+virNetSocketNewConnectSockFD;
 virNetSocketNewConnectSSH;
 virNetSocketNewConnectTCP;
 virNetSocketNewConnectUNIX;
index ae81512e71139a4628f3f1a9fda4cbaef5c92f2f..b311aae8c261d705792082190012c5ca77c1e276 100644 (file)
@@ -884,6 +884,24 @@ int virNetSocketNewConnectExternal(const char **cmdargv,
 }
 
 
+int virNetSocketNewConnectSockFD(int sockfd,
+                                 virNetSocketPtr *retsock)
+{
+    virSocketAddr localAddr;
+
+    localAddr.len = sizeof(localAddr.data);
+    if (getsockname(sockfd, &localAddr.data.sa, &localAddr.len) < 0) {
+        virReportSystemError(errno, "%s", _("Unable to get local socket name"));
+        return -1;
+    }
+
+    if (!(*retsock = virNetSocketNew(&localAddr, NULL, true, sockfd, -1, -1)))
+        return -1;
+
+    return 0;
+}
+
+
 virNetSocketPtr virNetSocketNewPostExecRestart(virJSONValuePtr object)
 {
     virSocketAddr localAddr;
index ca9ae914c096fc7074ff835212d14715907bef59..86bc2f6cdac81366171e740441ed7e0411fea9a4 100644 (file)
@@ -97,6 +97,8 @@ int virNetSocketNewConnectLibSSH2(const char *host,
 int virNetSocketNewConnectExternal(const char **cmdargv,
                                    virNetSocketPtr *addr);
 
+int virNetSocketNewConnectSockFD(int sockfd,
+                                 virNetSocketPtr *retsock);
 
 virNetSocketPtr virNetSocketNewPostExecRestart(virJSONValuePtr object);