HttpUtils.pm: avoid Deep recursion when the DNS-Server timed out (Forum #53309)

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@11612 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2016-06-04 14:12:42 +00:00
parent c14335f3f1
commit 0b1dd77d48

View File

@ -152,7 +152,7 @@ HttpUtils_gethostbyname($$$)
my $c = IO::Socket::INET->new(Proto=>'udp', PeerAddr=>"$dnsServer:53"); my $c = IO::Socket::INET->new(Proto=>'udp', PeerAddr=>"$dnsServer:53");
return $fn->($hash, "Cant create UDP socket:$!", undef) if(!$c); return $fn->($hash, "Cant create UDP socket:$!", undef) if(!$c);
my %dh = ( conn=>$c, FD=>$c->fileno(), NAME=>"DNS", my %dh = ( conn=>$c, FD=>$c->fileno(), NAME=>"DNS", origHash=>$hash,
addr=>$dnsServer, callback=>$fn ); addr=>$dnsServer, callback=>$fn );
my %timerHash = ( hash => \%dh ); my %timerHash = ( hash => \%dh );
my $bhost = join("", map { pack("CA*",length($_),$_) } split(/\./, $host)); my $bhost = join("", map { pack("CA*",length($_),$_) } split(/\./, $host));
@ -233,6 +233,7 @@ HttpUtils_Connect($)
if($hash->{conn}) { if($hash->{conn}) {
HttpUtils_gethostbyname($hash, $host, sub($$$) { HttpUtils_gethostbyname($hash, $host, sub($$$) {
my ($hash, $err, $iaddr) = @_; my ($hash, $err, $iaddr) = @_;
$hash = $hash->{origHash} if($hash->{origHash});
return $hash->{callback}($hash, $err, "") if($err); return $hash->{callback}($hash, $err, "") if($err);
my $ret = connect($hash->{conn}, sockaddr_in($port, $iaddr)); my $ret = connect($hash->{conn}, sockaddr_in($port, $iaddr));
if(!$ret) { if(!$ret) {