xref: /qemu/include/io/channel-watch.h (revision b83b68a0132f43f3ebcb61c9237ec1090da58894)
11c809fa0SDaniel P. Berrange /*
21c809fa0SDaniel P. Berrange  * QEMU I/O channels watch helper APIs
31c809fa0SDaniel P. Berrange  *
41c809fa0SDaniel P. Berrange  * Copyright (c) 2015 Red Hat, Inc.
51c809fa0SDaniel P. Berrange  *
61c809fa0SDaniel P. Berrange  * This library is free software; you can redistribute it and/or
71c809fa0SDaniel P. Berrange  * modify it under the terms of the GNU Lesser General Public
81c809fa0SDaniel P. Berrange  * License as published by the Free Software Foundation; either
91c809fa0SDaniel P. Berrange  * version 2 of the License, or (at your option) any later version.
101c809fa0SDaniel P. Berrange  *
111c809fa0SDaniel P. Berrange  * This library is distributed in the hope that it will be useful,
121c809fa0SDaniel P. Berrange  * but WITHOUT ANY WARRANTY; without even the implied warranty of
131c809fa0SDaniel P. Berrange  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
141c809fa0SDaniel P. Berrange  * Lesser General Public License for more details.
151c809fa0SDaniel P. Berrange  *
161c809fa0SDaniel P. Berrange  * You should have received a copy of the GNU Lesser General Public
171c809fa0SDaniel P. Berrange  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
181c809fa0SDaniel P. Berrange  *
191c809fa0SDaniel P. Berrange  */
201c809fa0SDaniel P. Berrange 
211c809fa0SDaniel P. Berrange #ifndef QIO_CHANNEL_WATCH_H__
221c809fa0SDaniel P. Berrange #define QIO_CHANNEL_WATCH_H__
231c809fa0SDaniel P. Berrange 
241c809fa0SDaniel P. Berrange #include "io/channel.h"
251c809fa0SDaniel P. Berrange 
261c809fa0SDaniel P. Berrange /*
271c809fa0SDaniel P. Berrange  * This module provides helper functions that will be needed by
281c809fa0SDaniel P. Berrange  * the various QIOChannel implementations, for creating watches
291c809fa0SDaniel P. Berrange  * on file descriptors / sockets
301c809fa0SDaniel P. Berrange  */
311c809fa0SDaniel P. Berrange 
321c809fa0SDaniel P. Berrange /**
331c809fa0SDaniel P. Berrange  * qio_channel_create_fd_watch:
341c809fa0SDaniel P. Berrange  * @ioc: the channel object
351c809fa0SDaniel P. Berrange  * @fd: the file descriptor
361c809fa0SDaniel P. Berrange  * @condition: the I/O condition
371c809fa0SDaniel P. Berrange  *
381c809fa0SDaniel P. Berrange  * Create a new main loop source that is able to
391c809fa0SDaniel P. Berrange  * monitor the file descriptor @fd for the
401c809fa0SDaniel P. Berrange  * I/O conditions in @condition. This is able
411c809fa0SDaniel P. Berrange  * monitor block devices, character devices,
42*b83b68a0SPaolo Bonzini  * pipes but not plain files or, on Win32, sockets.
431c809fa0SDaniel P. Berrange  *
441c809fa0SDaniel P. Berrange  * Returns: the new main loop source
451c809fa0SDaniel P. Berrange  */
461c809fa0SDaniel P. Berrange GSource *qio_channel_create_fd_watch(QIOChannel *ioc,
471c809fa0SDaniel P. Berrange                                      int fd,
481c809fa0SDaniel P. Berrange                                      GIOCondition condition);
491c809fa0SDaniel P. Berrange 
501c809fa0SDaniel P. Berrange /**
51*b83b68a0SPaolo Bonzini  * qio_channel_create_socket_watch:
52*b83b68a0SPaolo Bonzini  * @ioc: the channel object
53*b83b68a0SPaolo Bonzini  * @fd: the file descriptor
54*b83b68a0SPaolo Bonzini  * @condition: the I/O condition
55*b83b68a0SPaolo Bonzini  *
56*b83b68a0SPaolo Bonzini  * Create a new main loop source that is able to
57*b83b68a0SPaolo Bonzini  * monitor the file descriptor @fd for the
58*b83b68a0SPaolo Bonzini  * I/O conditions in @condition. This is equivalent
59*b83b68a0SPaolo Bonzini  * to qio_channel_create_fd_watch on POSIX systems
60*b83b68a0SPaolo Bonzini  * but not on Windows.
61*b83b68a0SPaolo Bonzini  *
62*b83b68a0SPaolo Bonzini  * Returns: the new main loop source
63*b83b68a0SPaolo Bonzini  */
64*b83b68a0SPaolo Bonzini GSource *qio_channel_create_socket_watch(QIOChannel *ioc,
65*b83b68a0SPaolo Bonzini                                          int fd,
66*b83b68a0SPaolo Bonzini                                          GIOCondition condition);
67*b83b68a0SPaolo Bonzini 
68*b83b68a0SPaolo Bonzini /**
691c809fa0SDaniel P. Berrange  * qio_channel_create_fd_pair_watch:
701c809fa0SDaniel P. Berrange  * @ioc: the channel object
711c809fa0SDaniel P. Berrange  * @fdread: the file descriptor for reading
721c809fa0SDaniel P. Berrange  * @fdwrite: the file descriptor for writing
731c809fa0SDaniel P. Berrange  * @condition: the I/O condition
741c809fa0SDaniel P. Berrange  *
751c809fa0SDaniel P. Berrange  * Create a new main loop source that is able to
761c809fa0SDaniel P. Berrange  * monitor the pair of file descriptors @fdread
771c809fa0SDaniel P. Berrange  * and @fdwrite for the I/O conditions in @condition.
781c809fa0SDaniel P. Berrange  * This is intended for monitoring unidirectional
791c809fa0SDaniel P. Berrange  * file descriptors such as pipes, where a pair
801c809fa0SDaniel P. Berrange  * of descriptors is required for bidirectional
811c809fa0SDaniel P. Berrange  * I/O
821c809fa0SDaniel P. Berrange  *
831c809fa0SDaniel P. Berrange  * Returns: the new main loop source
841c809fa0SDaniel P. Berrange  */
851c809fa0SDaniel P. Berrange GSource *qio_channel_create_fd_pair_watch(QIOChannel *ioc,
861c809fa0SDaniel P. Berrange                                           int fdread,
871c809fa0SDaniel P. Berrange                                           int fdwrite,
881c809fa0SDaniel P. Berrange                                           GIOCondition condition);
891c809fa0SDaniel P. Berrange 
901c809fa0SDaniel P. Berrange #endif /* QIO_CHANNEL_WATCH_H__ */
91