]> git.zerfleddert.de Git - record-dvb/blobdiff - common.c
increase select-timeout to 100 milliseconds
[record-dvb] / common.c
index 97ec8073e93d681e7101abf6669f9dbb5af0a331..8f000fd902a078a9463b3e61e68c90af03632b11 100644 (file)
--- a/common.c
+++ b/common.c
@@ -2,17 +2,22 @@
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
 
 #include "common.h"
 
 struct dvb_host *parse(char *urlpart, char *defport)
 {
-       struct dvb_host *dvbhost;
+       static struct dvb_host *dvbhost = NULL;
        char *pos;
 
-       if (!(dvbhost = malloc(sizeof(struct dvb_host)))) {
-               perror("malloc");
-               exit(EXIT_FAILURE);
+       if (!dvbhost) {
+               if (!(dvbhost = malloc(sizeof(struct dvb_host)))) {
+                       perror("malloc");
+                       exit(EXIT_FAILURE);
+               }
        }
 
        bzero(dvbhost, sizeof(struct dvb_host));
@@ -62,3 +67,28 @@ struct dvb_host *parse(char *urlpart, char *defport)
 
        return dvbhost;
 }
+
+int resolve(struct dvb_host *dvbhost, struct sockaddr_in *server)
+{
+       struct addrinfo *s_addrinfo, addrhints;
+       int res;
+
+       bzero(&addrhints, sizeof(struct addrinfo));
+       addrhints.ai_family = PF_INET;
+       addrhints.ai_socktype = dvbhost->socktype;
+
+       if ((res = getaddrinfo(dvbhost->hostname, dvbhost->port, &addrhints, &s_addrinfo))) {
+               fprintf(stderr,"getaddrinfo: %s\n",gai_strerror(res));
+               return -1;
+       }
+
+       bzero(server, sizeof(struct sockaddr_in));
+       server->sin_family = AF_INET;
+       server->sin_addr.s_addr = ((struct sockaddr_in*)(s_addrinfo->ai_addr))->sin_addr.s_addr;
+       server->sin_port = ((struct sockaddr_in*)(s_addrinfo->ai_addr))->sin_port;
+
+       freeaddrinfo(s_addrinfo);
+
+       return 0;
+}
+
Impressum, Datenschutz