[vlc-commits] input: add vlc_accept_i11e() for the sake of completeness

Rémi Denis-Courmont git at videolan.org
Wed Jul 1 18:22:13 CEST 2015


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Jun 30 23:52:51 2015 +0300| [5a68ec400b9386cbbc9fcb42ab0884b9b93b6919] | committer: Rémi Denis-Courmont

input: add vlc_accept_i11e() for the sake of completeness

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5a68ec400b9386cbbc9fcb42ab0884b9b93b6919
---

 include/vlc_interrupt.h |    2 ++
 src/libvlccore.sym      |    1 +
 src/misc/interrupt.c    |   32 ++++++++++++++++++++++++++++++++
 3 files changed, 35 insertions(+)

diff --git a/include/vlc_interrupt.h b/include/vlc_interrupt.h
index 4e3ed26..7cc528b 100644
--- a/include/vlc_interrupt.h
+++ b/include/vlc_interrupt.h
@@ -103,6 +103,8 @@ ssize_t vlc_send_i11e(int fd, const void *buf, size_t len, int flags)
     return vlc_sendto_i11e(fd, buf, len, flags, NULL, 0);
 }
 
+VLC_API int vlc_accept_i11e(int fd, struct sockaddr *, socklen_t *, bool);
+
 /**
  * @}
  * @defgroup interrupt_context Interrupt context signaling and manipulation
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index a0a794c..18805a2 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -548,6 +548,7 @@ vlc_recvmsg_i11e
 vlc_recvfrom_i11e
 vlc_sendmsg_i11e
 vlc_sendto_i11e
+vlc_accept_i11e
 vlc_sem_wait_i11e
 vlc_interrupt_create
 vlc_interrupt_destroy
diff --git a/src/misc/interrupt.c b/src/misc/interrupt.c
index a202740..0b84f1b 100644
--- a/src/misc/interrupt.c
+++ b/src/misc/interrupt.c
@@ -38,6 +38,7 @@
 
 #include <vlc_common.h>
 #include <vlc_fs.h> /* vlc_pipe */
+#include <vlc_network.h> /* vlc_accept */
 
 #include "interrupt.h"
 #include "libvlc.h"
@@ -489,6 +490,20 @@ ssize_t vlc_sendto_i11e(int fd, const void *buf, size_t len, int flags,
     return vlc_sendmsg_i11e(fd, &msg, flags);
 }
 
+int vlc_accept_i11e(int fd, struct sockaddr *addr, socklen_t *addrlen,
+                  bool blocking)
+{
+    struct pollfd ufd;
+
+    ufd.fd = fd;
+    ufd.events = POLLIN;
+
+    if (vlc_poll_i11e(&ufd, 1, -1) < 0)
+        return -1;
+
+    return vlc_accept(fd, addr, addrlen, blocking);
+}
+
 #else /* _WIN32 */
 
 static void CALLBACK vlc_poll_i11e_wake_self(ULONG_PTR data)
@@ -620,4 +635,21 @@ ssize_t vlc_sendto_i11e(int fd, const void *buf, size_t len, int flags,
     return ret;
 }
 
+int vlc_accept_i11e(int fd, struct sockaddr *addr, socklen_t *addrlen,
+                  bool blocking)
+{
+    struct pollfd ufd;
+
+    ufd.fd = fd;
+    ufd.events = POLLIN;
+
+    if (vlc_poll_i11e(&ufd, 1, -1) < 0)
+        return -1;
+
+    int cfd = vlc_accept(fd, addr, addrlen, blocking);
+    if (cfd < 0 && WSAGetLastError() == WSAEWOULDBLOCK)
+        errno = EAGAIN;
+    return cfd;
+}
+
 #endif



More information about the vlc-commits mailing list