From: michael Date: Sun, 2 Jul 2006 00:50:31 +0000 (+0000) Subject: enforce timeouts X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/record-dvb/commitdiff_plain/89ec024f927084cf53df08c246406a2551b3ad5c?hp=90d8d87bb07bd2e77fc19df4efe41c23464cbbf0 enforce timeouts --- diff --git a/record-dvb.c b/record-dvb.c index d87d3e7..9356348 100644 --- a/record-dvb.c +++ b/record-dvb.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -25,6 +26,9 @@ void record(int(*open_fn)(char *), char *url, char *outfile, int duration) int error_sleep = 0; char buffer[CHUNKSIZE]; int in, out; + fd_set rfds; + struct timeval tv; + int retval; if ((in = (*open_fn)(url)) < 0) { fprintf(stderr,"Can't open url %s!\n",url); @@ -60,6 +64,22 @@ void record(int(*open_fn)(char *), char *url, char *outfile, int duration) } } + FD_ZERO(&rfds); + FD_SET(in, &rfds); + + tv.tv_sec = 1; + tv.tv_usec = 0; + + if ((retval = select(in + 1, &rfds, NULL, NULL, &tv)) == -1) { + error_sleep = 1; + continue; + } + + if (!retval) { + gettimeofday(&curr, NULL); + continue; + } + if ((recvd = recv(in, buffer, CHUNKSIZE, 0)) < 1) { error_sleep = 1; continue; diff --git a/sap.c b/sap.c index 684c509..49dfcc8 100644 --- a/sap.c +++ b/sap.c @@ -8,6 +8,8 @@ #include #include #include +#include +#include #include "mcast.h" #include "sap.h" @@ -41,6 +43,25 @@ char *get_url_from_sap(char *service) unsigned char auth_len; unsigned short msgid; unsigned char *payload, *pos, *host = NULL, *proto = NULL, *port = NULL, *sname = NULL; + fd_set rfds; + struct timeval tv; + int retval; + + FD_ZERO(&rfds); + FD_SET(fd, &rfds); + + tv.tv_sec = 0; + tv.tv_usec = 1000; + + if ((retval = select(fd+1, &rfds, NULL, NULL, &tv)) == -1) { + perror("select"); + return NULL; + } + + if (!retval) { + gettimeofday(&curr, NULL); + continue; + } if ((recvd = recv(fd, buffer, BUFFSIZE, 0)) < 1) { perror("recv");