chiark / gitweb /
resolved: support for TCP DNS queries
[elogind.git] / src / resolve / resolved-manager.c
index 8718ea40b298c1d1cbcac7d7c93340e119c3e1ef..3d2979dbbe196922eba809f3dcad72f6f1b592f8 100644 (file)
@@ -577,7 +577,7 @@ int manager_dns_ipv4_recv(Manager *m, DnsPacket **ret) {
 
         l = recvmsg(fd, &mh, 0);
         if (l < 0) {
-                if (errno == EAGAIN)
+                if (errno == EAGAIN || errno == EINTR)
                         return 0;
 
                 return -errno;
@@ -626,7 +626,7 @@ int manager_dns_ipv6_recv(Manager *m, DnsPacket **ret) {
 
         l = recvmsg(fd, &mh, 0);
         if (l < 0) {
-                if (errno == EAGAIN)
+                if (errno == EAGAIN || errno == EINTR)
                         return 0;
 
                 return -errno;
@@ -653,11 +653,12 @@ static int on_dns_ipv4_packet(sd_event_source *s, int fd, uint32_t revents, void
         if (r <= 0)
                 return r;
 
-        t = hashmap_get(m->dns_query_transactions, UINT_TO_PTR(DNS_PACKET_HEADER(p)->id));
+        t = hashmap_get(m->dns_query_transactions, UINT_TO_PTR(DNS_PACKET_ID(p)));
         if (!t)
                 return 0;
 
-        return dns_query_transaction_reply(t, p);
+        dns_query_transaction_reply(t, p);
+        return 0;
 }
 
 static int on_dns_ipv6_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
@@ -670,11 +671,12 @@ static int on_dns_ipv6_packet(sd_event_source *s, int fd, uint32_t revents, void
         if (r <= 0)
                 return r;
 
-        t = hashmap_get(m->dns_query_transactions, UINT_TO_PTR(DNS_PACKET_HEADER(p)->id));
+        t = hashmap_get(m->dns_query_transactions, UINT_TO_PTR(DNS_PACKET_ID(p)));
         if (!t)
                 return 0;
 
-        return dns_query_transaction_reply(t, p);
+        dns_query_transaction_reply(t, p);
+        return 0;
 }
 
 int manager_dns_ipv4_fd(Manager *m) {