in reply to Re: send: Cannot determine peer address at ./toritv.pl line 183
in thread send: Cannot determine peer address at ./toritv.pl line 183

Here is the dump for $client:
== BEGIN datadump ==
$VAR1 = \bless( \*Symbol::GEN10, 'IO::Socket::INET' );
== END datadump ==
The dump from %output is pretty big (70Kb), so instead of posting it here, i uploaded it to:
http://www.clockworkninja.net/ffaa/outbuffer.dmp
  • Comment on Re^2: send: Cannot determine peer address at ./toritv.pl line 183

Replies are listed 'Best First'.
Re^3: send: Cannot determine peer address at ./toritv.pl line 183
by moritz (Cardinal) on Jul 11, 2007 at 11:37 UTC
    Looking into IO::Socket at http://search.cpan.org/src/GBARR/IO-1.2301/IO/Socket.pm reveals:

    sub send { @_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]] +)'; my $sock = $_[0]; my $flags = $_[2] || 0; my $peer = $_[3] || $sock->peername; croak 'send: Cannot determine peer address' unless($peer);

    So you have to take care that either peername is initialized on object creation, or provided the peer address as a third argument to send().

      In my case the same error 'send: Cannot determine peer address' arised, but it is because when program A is trying to send(IO::socket) data on socket (program B is connected to the other end) and the program B has just exited abnormally.
      I have already trapped the PIPE signal in program A, but in this case I am not even receiving PIPE signal,(thinking that I am using write).
      Later while seeing this IO::Socket::send, i found that when that error is croaked, the write even is not attempted, so I just checked whether the peer is defined or not, before calling IO::Socket::send.
      I presume in other cases(such as plain write) we may receive SIGPIPE.