diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 7665c3a12bb152f946c994800fbe832f3cf3a89b..1ecee4c2fdf883c9e5bb2e3b947b788e9fbb8473 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -1011,6 +1011,7 @@ virNetSocketLocalAddrString; virNetSocketNewConnectCommand; virNetSocketNewConnectExternal; virNetSocketNewConnectLibSSH2; +virNetSocketNewConnectSockFD; virNetSocketNewConnectSSH; virNetSocketNewConnectTCP; virNetSocketNewConnectUNIX; diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index ae81512e71139a4628f3f1a9fda4cbaef5c92f2f..b311aae8c261d705792082190012c5ca77c1e276 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -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; diff --git a/src/rpc/virnetsocket.h b/src/rpc/virnetsocket.h index ca9ae914c096fc7074ff835212d14715907bef59..86bc2f6cdac81366171e740441ed7e0411fea9a4 100644 --- a/src/rpc/virnetsocket.h +++ b/src/rpc/virnetsocket.h @@ -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);