Skip to content

Commit

Permalink
io: introduce qio_channel_create_socket_watch
Browse files Browse the repository at this point in the history
Sockets are not in the same namespace as file descriptors on Windows.
As an initial step, introduce separate APIs for file descriptor and
socket watches.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
bonzini authored and berrange committed Mar 10, 2016
1 parent e560d14 commit b83b68a
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 4 deletions.
20 changes: 19 additions & 1 deletion include/io/channel-watch.h
Expand Up @@ -39,14 +39,32 @@
* monitor the file descriptor @fd for the
* I/O conditions in @condition. This is able
* monitor block devices, character devices,
* sockets, pipes but not plain files.
* pipes but not plain files or, on Win32, sockets.
*
* Returns: the new main loop source
*/
GSource *qio_channel_create_fd_watch(QIOChannel *ioc,
int fd,
GIOCondition condition);

/**
* qio_channel_create_socket_watch:
* @ioc: the channel object
* @fd: the file descriptor
* @condition: the I/O condition
*
* Create a new main loop source that is able to
* monitor the file descriptor @fd for the
* I/O conditions in @condition. This is equivalent
* to qio_channel_create_fd_watch on POSIX systems
* but not on Windows.
*
* Returns: the new main loop source
*/
GSource *qio_channel_create_socket_watch(QIOChannel *ioc,
int fd,
GIOCondition condition);

/**
* qio_channel_create_fd_pair_watch:
* @ioc: the channel object
Expand Down
6 changes: 3 additions & 3 deletions io/channel-socket.c
Expand Up @@ -714,9 +714,9 @@ static GSource *qio_channel_socket_create_watch(QIOChannel *ioc,
GIOCondition condition)
{
QIOChannelSocket *sioc = QIO_CHANNEL_SOCKET(ioc);
return qio_channel_create_fd_watch(ioc,
sioc->fd,
condition);
return qio_channel_create_socket_watch(ioc,
sioc->fd,
condition);
}

static void qio_channel_socket_class_init(ObjectClass *klass,
Expand Down
15 changes: 15 additions & 0 deletions io/channel-watch.c
Expand Up @@ -172,6 +172,21 @@ GSource *qio_channel_create_fd_watch(QIOChannel *ioc,
return source;
}

#ifdef CONFIG_WIN32
GSource *qio_channel_create_socket_watch(QIOChannel *ioc,
int socket,
GIOCondition condition)
{
abort();
}
#else
GSource *qio_channel_create_socket_watch(QIOChannel *ioc,
int socket,
GIOCondition condition)
{
return qio_channel_create_fd_watch(ioc, socket, condition);
}
#endif

GSource *qio_channel_create_fd_pair_watch(QIOChannel *ioc,
int fdread,
Expand Down

0 comments on commit b83b68a

Please sign in to comment.