123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- From 0b816ffc8447a88cac3dd99e7a576637f96692a9 Mon Sep 17 00:00:00 2001
- From: Gleb Pinigin <gpinigin@gmail.com>
- Date: Mon, 25 Mar 2013 11:09:33 +0700
- Subject: [PATCH 4/4] MINOR implement network timeout(default 60s)
- ---
- src/network/io.c | 19 +++++++++++++++++--
- 1 file changed, 17 insertions(+), 2 deletions(-)
- diff --git a/src/network/io.c b/src/network/io.c
- index 7cc9764..16ea48c 100644
- --- a/src/network/io.c
- +++ b/src/network/io.c
- @@ -33,6 +33,7 @@
- #endif
-
- #include <vlc_common.h>
- +#include <vlc_access.h>
-
- #include <stdlib.h>
- #include <stdio.h>
- @@ -69,6 +70,9 @@
- # define SOL_DCCP 269
- #endif
-
- +#define MAX_TIMEOUT 60000
- +#define POLL_TIMEOUT 10000
- +
- #include "libvlc.h" /* vlc_object_waitpipe */
-
- extern int rootwrap_bind (int family, int socktype, int protocol,
- @@ -265,15 +269,19 @@ net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
- if (ufd[1].fd == -1)
- return -1; /* vlc_object_waitpipe() sets errno */
-
- + int i_timepassed = 0;
- +
- while (i_buflen > 0)
- {
- - if (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), -1) < 0)
- + if (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), POLL_TIMEOUT) < 0)
- {
- if (errno != EINTR)
- goto error;
- continue;
- }
-
- + i_timepassed += POLL_TIMEOUT;
- +
- if (i_total > 0)
- {
- /* Errors (-1) and EOF (0) will be returned on next call,
- @@ -357,7 +365,14 @@ net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
- case EWOULDBLOCK:
- #endif
- case EINTR: /* asynchronous signal */
- - continue;
- + if (i_timepassed >= MAX_TIMEOUT && i_total == 0)
- + {
- + access_t *p_access = (access_t *)p_this;
- + p_access->info.b_eof = true;
- + goto error;
- + }
- + else
- + continue;
- }
- #endif
- goto error;
- --
- 1.7.12.4 (Apple Git-37)
|