I'm afraid I don't have any easy way to recreate it, other than throwing a lot of clients at it. It's perl 5.8.4 running under Linux 2.6.8. If I use the list form of accept, I get back the peer address correctly. Here's some debugging code:
foreach my $socket (@ready)
print STDERR "Start accept\n";
my ($connect, $paddr) = $socket->accept();
my ($port, $iaddr) = sockaddr_in($paddr);
print STDERR "Peer: ", inet_ntoa($iaddr), ":$port\n";
cluck("NULL PEERHOST: " . join(" : ",
print STDERR "End accept (no peerhost)
print STDERR "End accept (success)\n";
print STDERR "End accept (no connect)\n";
Output looks like this:
NULL PEERHOST: Y.Y.Y.Y : 1235 : : : Transport endpoint is not connected at ./foo.pl line 115
End accept (no peerhost)
Where X.X.X.X is the client ip and Y.Y.Y.Y is my server ip. Perhaps this is an IO::Socket::INET bug?
On a related note, I'm also getting segfaults from perl under heavy load (~2500+ clients). The segfaults don't seem to be related to the null peerhosts. I believe they're occuring on syswrite() calls when I'm sending text back to the clients.