diff options
author | albeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-23 21:22:55 +0000 |
---|---|---|
committer | albeu <albeu@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-23 21:22:55 +0000 |
commit | 9ada242c51e0d325d553d3ec875373f1126d7cb1 (patch) | |
tree | 1a88924eaf222faf9d4e5506cd827a6c4d520502 /libmpdemux/network.c | |
parent | 5264cd378017ef8d42a4fe83d371272bdfaacaef (diff) | |
download | mpv-9ada242c51e0d325d553d3ec875373f1126d7cb1.tar.bz2 mpv-9ada242c51e0d325d553d3ec875373f1126d7cb1.tar.xz |
Make blocking call in libmpdemux interuptable (only with new input,
awnser to quit, pt_next, pt_up_step and alt_src_step)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4826 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/network.c')
-rw-r--r-- | libmpdemux/network.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/libmpdemux/network.c b/libmpdemux/network.c index 91a55cb741..ddd243eef3 100644 --- a/libmpdemux/network.c +++ b/libmpdemux/network.c @@ -19,6 +19,7 @@ #include "stream.h" #include "demuxer.h" #include "../cfgparser.h" +#include "mpdemux.h" #include "network.h" #include "http.h" @@ -124,7 +125,7 @@ int connect2Server(char *host, int port) { int socket_server_fd; int err, err_len; - int ret; + int ret,count = 0; fd_set set; struct timeval tv; struct sockaddr_in server_address; @@ -160,16 +161,24 @@ connect2Server(char *host, int port) { return -1; } } - tv.tv_sec = 15; // 15 seconds timeout on connection - tv.tv_usec = 0; + tv.tv_sec = 0; + tv.tv_usec = 500000; FD_ZERO( &set ); FD_SET( socket_server_fd, &set ); // When the connection will be made, we will have a writable fd - ret = select(socket_server_fd+1, NULL, &set, NULL, &tv); - if( ret<=0 ) { - if( ret<0 ) perror("select failed"); - else printf("Connection timeout\n"); + while((ret = select(socket_server_fd+1, NULL, &set, NULL, &tv)) == 0) { + if( ret<0 ) perror("select failed"); + else if(ret > 0) break; + else if(count > 15 || mpdemux_check_interrupt(500)) { + if(count > 15) + printf("Connection timeout\n"); + else + printf("Connection interuppted by user\n"); return -1; + } + count++; + FD_ZERO( &set ); + FD_SET( socket_server_fd, &set ); } // Turn back the socket as blocking |