increase select-timeout to 100 milliseconds
[record-dvb] / sap.c
diff --git a/sap.c b/sap.c
index f10bce8dfe64fb0e14955630d7aee618f5f52b92..bc51aa5bea9d059640a1bbb28657fffa0f0160c1 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 = 100000;
+
+               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");
@@ -197,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