From: Remi Gacogne Date: Fri, 22 Dec 2023 16:10:45 +0000 (+0100) Subject: Socket: Return the remote peer from Socket::recvFromAsync X-Git-Tag: auth-4.9.0-alpha1~18^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=26dc9fdf12d4434eaed669983a65d8d6fc5da174;p=thirdparty%2Fpdns.git Socket: Return the remote peer from Socket::recvFromAsync --- diff --git a/pdns/dnsreplay.cc b/pdns/dnsreplay.cc index 1ba97da204..66d2fcb958 100644 --- a/pdns/dnsreplay.cc +++ b/pdns/dnsreplay.cc @@ -394,7 +394,7 @@ try if(res < 0 || res==0) return; - while(s_socket->recvFromAsync(packet)) { + while (s_socket->recvFromAsync(packet, remote)) { try { s_weanswers++; MOADNSParser mdp(false, packet.c_str(), packet.length()); diff --git a/pdns/sstuff.hh b/pdns/sstuff.hh index 208697cc2b..f0b1866262 100644 --- a/pdns/sstuff.hh +++ b/pdns/sstuff.hh @@ -184,19 +184,16 @@ public: dgram.assign(d_buffer, 0, static_cast(bytes)); } - bool recvFromAsync(string &dgram) + bool recvFromAsync(string& dgram, ComboAddress& remote) { - struct sockaddr_in remote; socklen_t remlen = sizeof(remote); - ssize_t bytes; d_buffer.resize(s_buflen); - if((bytes=recvfrom(d_socket, &d_buffer[0], s_buflen, 0, reinterpret_cast(&remote), &remlen))<0) { - if(errno!=EAGAIN) { - throw NetworkError("After async recvfrom: "+stringerror()); - } - else { - return false; + const auto bytes = recvfrom(d_socket, d_buffer.data(), s_buflen, 0, reinterpret_cast(&remote), &remlen); + if (bytes < 0) { + if (errno != EAGAIN) { + throw NetworkError("After async recvfrom: " + stringerror()); } + return false; } dgram.assign(d_buffer, 0, static_cast(bytes)); return true;