]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix udp-connect on FreeBSD, do send calls on connected UDP socket.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 25 Nov 2020 08:55:01 +0000 (09:55 +0100)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Wed, 25 Nov 2020 08:55:01 +0000 (09:55 +0100)
doc/Changelog
services/outside_network.c
util/netevent.c
util/netevent.h

index 0f46a3694b25f3a4b98f951c967551f449875bde..0ceba16b4d582799c51224804bc3c4fb3107d6d2 100644 (file)
@@ -1,5 +1,6 @@
 25 November 2020: Wouter
        - with udp-connect ignore connection refused with UDP timeouts.
+       - Fix udp-connect on FreeBSD, do send calls on connected UDP socket.
 
 24 November 2020: Wouter
        - Merge PR #283 : Stream reuse.  This implements upstream stream
index a55cc1cd3cd57791d667e6feb9d20b1ce709c60c..7245506326eeefc86ccc3e469544a48259cd4362 100644 (file)
@@ -1854,10 +1854,17 @@ randomize_and_send_udp(struct pending* pend, sldns_buffer* packet, int timeout)
        log_assert(pend->pc && pend->pc->cp);
 
        /* send it over the commlink */
-       if(!comm_point_send_udp_msg(pend->pc->cp, packet, 
-               (struct sockaddr*)&pend->addr, pend->addrlen)) {
-               portcomm_loweruse(outnet, pend->pc);
-               return 0;
+       if(outnet->udp_connect) {
+               if(!comm_point_send_udp_msg(pend->pc->cp, packet, NULL, 0)) {
+                       portcomm_loweruse(outnet, pend->pc);
+                       return 0;
+               }
+       } else {
+               if(!comm_point_send_udp_msg(pend->pc->cp, packet,
+                       (struct sockaddr*)&pend->addr, pend->addrlen)) {
+                       portcomm_loweruse(outnet, pend->pc);
+                       return 0;
+               }
        }
 
        /* system calls to set timeout after sending UDP to make roundtrip
index 7999e2c3f194dfaa776840d495e2464993ea11c8..814ab6f0a39a51f5f959034243c80f4a089d8459 100644 (file)
@@ -341,10 +341,15 @@ comm_point_send_udp_msg(struct comm_point *c, sldns_buffer* packet,
        if(sldns_buffer_remaining(packet) == 0)
                log_err("error: send empty UDP packet");
 #endif
-       log_assert(addr && addrlen > 0);
-       sent = sendto(c->fd, (void*)sldns_buffer_begin(packet), 
-               sldns_buffer_remaining(packet), 0,
-               addr, addrlen);
+       if(addr) {
+               log_assert(addr && addrlen > 0);
+               sent = sendto(c->fd, (void*)sldns_buffer_begin(packet),
+                       sldns_buffer_remaining(packet), 0,
+                       addr, addrlen);
+       } else {
+               sent = send(c->fd, (void*)sldns_buffer_begin(packet),
+                       sldns_buffer_remaining(packet), 0);
+       }
        if(sent == -1) {
                /* try again and block, waiting for IO to complete,
                 * we want to send the answer, and we will wait for
index ce07b7500659d7dcef3e3face811ea07ac45df84..75baf2177c5dd4b5a7452e8d108c4174ac3c71d3 100644 (file)
@@ -620,7 +620,8 @@ void comm_point_drop_reply(struct comm_reply* repinfo);
  * Send an udp message over a commpoint.
  * @param c: commpoint to send it from.
  * @param packet: what to send.
- * @param addr: where to send it to.
+ * @param addr: where to send it to.   If NULL, send is performed,
+ *     for connected sockets, to the connected address.
  * @param addrlen: length of addr.
  * @return: false on a failure.
  */