The only realization, which may have incoming fds is qio_channel_socket_readv() (in io/channel-socket.c). qio_channel_socket_readv() do call (through qio_channel_socket_copy_fds()) qemu_socket_set_block() and qemu_set_cloexec() for each fd.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]> --- include/io/channel.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/io/channel.h b/include/io/channel.h index 234e5db70d..b848d50b99 100644 --- a/include/io/channel.h +++ b/include/io/channel.h @@ -117,6 +117,12 @@ struct QIOChannelClass { size_t nfds, int flags, Error **errp); + + /* + * The io_readv handler must guarantee that all + * incoming fds are set BLOCKING and CLOEXEC (if + * available). + */ ssize_t (*io_readv)(QIOChannel *ioc, const struct iovec *iov, size_t niov, @@ -124,6 +130,7 @@ struct QIOChannelClass { size_t *nfds, int flags, Error **errp); + int (*io_close)(QIOChannel *ioc, Error **errp); GSource * (*io_create_watch)(QIOChannel *ioc, @@ -234,6 +241,9 @@ void qio_channel_set_name(QIOChannel *ioc, * was allocated. It is the callers responsibility * to call close() on each file descriptor and to * call g_free() on the array pointer in @fds. + * qio_channel_readv_full() guarantees that all + * incoming fds are set BLOCKING and CLOEXEC (if + * available). * * It is an error to pass a non-NULL @fds parameter * unless qio_channel_has_feature() returns a true -- 2.48.1
