qemu-sockets: introduce socket_address_parse_named_fd()

Add function that transforms named fd inside SocketAddress structure
into number representation. This way it may be then used in a context
where current monitor is not available.

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20210610100802.5888-6-vsementsov@virtuozzo.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
[eblake: comment tweak]
Signed-off-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
Vladimir Sementsov-Ogievskiy 2021-06-10 13:07:35 +03:00 committed by Eric Blake
parent fb392b548e
commit c542370418
2 changed files with 30 additions and 0 deletions

View file

@ -111,4 +111,15 @@ SocketAddress *socket_remote_address(int fd, Error **errp);
*/
SocketAddress *socket_address_flatten(SocketAddressLegacy *addr);
/**
* socket_address_parse_named_fd:
*
* Modify @addr, replacing a named fd by its corresponding number.
* Needed for callers that plan to pass @addr to a context where the
* current monitor is not available.
*
* Return 0 on success.
*/
int socket_address_parse_named_fd(SocketAddress *addr, Error **errp);
#endif /* QEMU_SOCKETS_H */

View file

@ -1164,6 +1164,25 @@ static int socket_get_fd(const char *fdstr, Error **errp)
return fd;
}
int socket_address_parse_named_fd(SocketAddress *addr, Error **errp)
{
int fd;
if (addr->type != SOCKET_ADDRESS_TYPE_FD) {
return 0;
}
fd = socket_get_fd(addr->u.fd.str, errp);
if (fd < 0) {
return fd;
}
g_free(addr->u.fd.str);
addr->u.fd.str = g_strdup_printf("%d", fd);
return 0;
}
int socket_connect(SocketAddress *addr, Error **errp)
{
int fd;