Unix ソケットを介して単純なエコー クライアント/サーバーを実装しようとしています。(私の最終的な目標は JSON データを交換することですが、この例は簡単にするためです)。クライアント プロセスが 2 回目にソケットに出力しようとすると、ブラック ホールに消えてしまう理由がわかりません。
server.pl :
use IO::Socket::UNIX;
my $socket_path = '/tmp/mysocket';
unlink $socket_path if -e $socket_path;
my $socket = IO::Socket::UNIX->new(
Local => $socket_path,
Type => SOCK_STREAM,
Listen => SOMAXCONN,
);
die "Can't create socket: $!" unless $socket;
while (1) {
next unless my $connection = $socket->accept;
chomp( my $line = <$connection> );
print $connection "$line\n";
}
client.pl :
use IO::Socket::UNIX;
my $socket = IO::Socket::UNIX->new(
Type => SOCK_STREAM,
Peer => '/tmp/mysocket',
);
die "Can't create socket: $!" unless $socket;
my $line;
print $socket "one\n";
chomp( $line = <$socket> );
say $line;
print $socket "two\n";
chomp( $line = <$socket> );
say $line;
say "three";
期待される出力:
> ./client.pl
> one
> two
> three
実際の出力:
> ./client.pl
> one