]> git.proxmox.com Git - mirror_qemu.git/commitdiff
io: introduce qio_channel_create_socket_watch
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 7 Mar 2016 10:16:39 +0000 (11:16 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Thu, 10 Mar 2016 17:10:19 +0000 (17:10 +0000)
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>
include/io/channel-watch.h
io/channel-socket.c
io/channel-watch.c

index 656358ad641aedbf850eeb565b3764411fd2fa1d..76d764223ea033826bde530dfdf78ca182f5644e 100644 (file)
@@ -39,7 +39,7 @@
  * 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
  */
@@ -47,6 +47,24 @@ 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
index 5f087e68d10d485fcfc6d0d23605376d0de79e40..775bb9fcbc484f9df8098a07836a0bacee2303e6 100644 (file)
@@ -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,
index 537360527ac60338093e11e759cf19784fd2e9b7..dfac8f8a58076bf30194d44bc60b2d91d48081b0 100644 (file)
@@ -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,