{
PacketID pident=*any_cast<PacketID>(&var);
char resp[512];
- ssize_t ret=recv(fd, resp, sizeof(resp), 0);
+ ComboAddress fromaddr;
+ socklen_t addrlen=sizeof(fromaddr);
+
+ ssize_t ret=recvfrom(fd, resp, sizeof(resp), 0, (sockaddr *)&fromaddr, &addrlen);
+ if (fromaddr != pident.remote) {
+ L<<Logger::Notice<<"Response received from the wrong remote host ("<<fromaddr.toStringWithPort()<<" instead of "<<pident.remote.toStringWithPort()<<"), discarding"<<endl;
+
+ }
+
t_fdm->removeReadFD(fd);
if(ret >= 0) {
string data(resp, (size_t) ret);
PacketID pident;
pident.sock=&s;
+ pident.remote=dest;
pident.type=0;
t_fdm->addReadFD(s.getHandle(), handleGenUDPQueryResponse, pident);