[vlc-commits] net_Recv(): improve error handling (fixes #9081)
Rémi Denis-Courmont
git at videolan.org
Tue Jul 30 17:07:33 CEST 2013
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Jul 30 18:07:14 2013 +0300| [e8f36f6e7f54b8bcf6d5341af1cdc626c2b6c800] | committer: Rémi Denis-Courmont
net_Recv(): improve error handling (fixes #9081)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e8f36f6e7f54b8bcf6d5341af1cdc626c2b6c800
---
src/network/io.c | 29 ++++++++++++++++++-----------
1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/src/network/io.c b/src/network/io.c
index 9b13b2a..21bf82b 100644
--- a/src/network/io.c
+++ b/src/network/io.c
@@ -61,6 +61,10 @@
#if defined(_WIN32)
# undef EAFNOSUPPORT
# define EAFNOSUPPORT WSAEAFNOSUPPORT
+# undef EWOULDBLOCK
+# define EWOULDBLOCK WSAEWOULDBLOCK
+# undef EAGAIN
+# define EAGAIN WSAEWOULDBLOCK
#endif
#ifdef HAVE_LINUX_DCCP_H
@@ -286,13 +290,15 @@ net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
{
switch (net_errno)
{
- case EAGAIN: /* spurious wakeup or no TLS data */
+ case EAGAIN: /* no data */
#if (EAGAIN != EWOULDBLOCK)
case EWOULDBLOCK:
#endif
- case EINTR: /* asynchronous signal */
break;
-#ifdef _WIN32
+#ifndef _WIN32
+ case EINTR: /* asynchronous signal */
+ continue;
+#else
case WSAEMSGSIZE: /* datagram too big */
n = i_buflen;
break;
@@ -311,25 +317,26 @@ net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
if (!waitall)
break;
}
- else
+ else /* n == 0 */
break;/* end of stream or empty packet */
- /* Wait for more data */
if (ufd[1].fd == -1)
{
errno = EINTR;
return -1;
}
- while (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), -1) < 0)
- if (errno != EINTR)
- goto error;
+
+ /* Wait for more data */
+ if (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), -1) < 0)
+ {
+ if (errno == EINTR)
+ continue;
+ goto error;
+ }
if (ufd[1].revents)
{
msg_Dbg (p_this, "socket %d polling interrupted", fd);
-#if defined(_WIN32)
- WSASetLastError (WSAEINTR);
-#endif
errno = EINTR;
return -1;
}
More information about the vlc-commits
mailing list