]> git.zerfleddert.de Git - record-dvb/blobdiff - sap.c
enforce timeouts
[record-dvb] / sap.c
diff --git a/sap.c b/sap.c
index 8dfa6944eb0e4aefad2383de7db3cd3bcf58ff21..49dfcc8d8f2d9f0c2d7074f129579410887d58d4 100644 (file)
--- a/sap.c
+++ b/sap.c
@@ -8,6 +8,8 @@
 #include <time.h>
 #include <string.h>
 #include <strings.h>
+#include <unistd.h>
+#include <sys/select.h>
 
 #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");
@@ -81,6 +102,7 @@ char *get_url_from_sap(char *service)
 
                if (sap_encrypted || sap_compressed)
                        continue;
+
                /* RFC 2327
                 * v=0
                 * o=- 6dca 1 IN IP4 192.168.100.17:2000
@@ -196,5 +218,7 @@ char *get_url_from_sap(char *service)
        mreq.imr_interface.s_addr = INADDR_ANY;
        setsockopt (fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
 
+       close(fd);
+
        return url;
 }
Impressum, Datenschutz