From bead59946a8b54398f4ba3c9c8ecd15eeac78c53 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Mon, 21 Dec 2015 12:04:21 +0000 Subject: io: fix setting of QIO_CHANNEL_FEATURE_FD_PASS on server connections The QIO_CHANNEL_FEATURE_FD_PASS feature flag is set in the qio_channel_socket_set_fd() method, however, this only deals with client side connections. To ensure server side connections also have the feature flag set, we must set it in qio_channel_socket_accept() too. This also highlighted a typo fix where the code updated the sockaddr struct in the wrong object instance. Reviewed-by: Eric Blake Signed-off-by: Daniel P. Berrange --- io/channel-socket.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'io/channel-socket.c') diff --git a/io/channel-socket.c b/io/channel-socket.c index 90b3c73358..eed2ff5bcf 100644 --- a/io/channel-socket.c +++ b/io/channel-socket.c @@ -352,13 +352,19 @@ qio_channel_socket_accept(QIOChannelSocket *ioc, goto error; } - if (getsockname(cioc->fd, (struct sockaddr *)&ioc->localAddr, - &ioc->localAddrLen) < 0) { + if (getsockname(cioc->fd, (struct sockaddr *)&cioc->localAddr, + &cioc->localAddrLen) < 0) { error_setg_errno(errp, socket_error(), "Unable to query local socket address"); goto error; } +#ifndef WIN32 + if (cioc->localAddr.ss_family == AF_UNIX) { + QIO_CHANNEL(cioc)->features |= (1 << QIO_CHANNEL_FEATURE_FD_PASS); + } +#endif /* WIN32 */ + trace_qio_channel_socket_accept_complete(ioc, cioc, cioc->fd); return cioc; -- cgit v1.2.3