http://www.perlmonks.org?node_id=855869

Velaki has asked for the wisdom of the Perl Monks concerning the following question:

I have a situation where my SOAP code works fine, up until the point I need to connect to a service that is unavailable. When I do, the process simply hangs.

The on_fault executes on call() after a few minutes, but never appears to return; instead, the process simply dies. No traps, eval doesn't protect it, no messages; just dies.

# This should work, not sure. use SOAP::Lite on_fault => sub { my $msg = "ERROR: "; my ($soap, $result) = @_; $msg .= ref $result ? $result->faultstring : $soap->transport->status; print STDERR "\tFault -> $msg\n"; }; # This works! my $c = eval { SOAP::Lite->uri($uri) ->on_action(sub { join '', @_ }) ->proxy($proxy); }; # This is suspect. $c->transport->timeout(5); # This hangs for minutes. my $r = eval { $c->call( SOAP::Data->name('FooService'), SOAP::Data->name('FooVar')->value($foo)->type('int')); };

And the timeout doesn't seem to work. Even when set to 2 seconds, it still hangs for minutes.

Thoughts?

"Perl. There is no substitute."