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
| [reply] |
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().
| [reply] [d/l] [select] |
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.
| [reply] |