diff options
author | Daniel P. Berrange <berrange@redhat.com> | 2015-12-21 12:04:21 +0000 |
---|---|---|
committer | Daniel P. Berrange <berrange@redhat.com> | 2015-12-22 18:19:32 +0000 |
commit | bead59946a8b54398f4ba3c9c8ecd15eeac78c53 (patch) | |
tree | 7a413335e6a2767b8d172dfe3d92348d7848e88a /io/channel-socket.c | |
parent | e4d2edc9d0c58de421eb349871e90b67edec0b9c (diff) |
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 <eblake@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
Diffstat (limited to 'io/channel-socket.c')
-rw-r--r-- | io/channel-socket.c | 10 |
1 files changed, 8 insertions, 2 deletions
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; |