IO::Socket でサーバ実装

2012年1月9日月曜日

perl

t f B! P L

perl でサーバ作ることはないと思いますが。ただのエコーサーバの習作メモ。

#!/usr/local/bin/perl

use strict;
use IO::Socket;

my $port = 5000;

# MAIN
my $listenSock = IO::Socket::INET->new(
 LocalPort => $port,
 Listen => SOMAXCONN,
 Proto => 'tcp',
 Reuse => 1
) or die "bind $port failed.\n";

print "listen start.\n";

while (1) {
 my $newSock = $listenSock->accept;
 if (my $pid = fork){
  #親プロセス
  $newSock->close;
 } else {
  #子プロセス
  $listenSock->close;
  #出力バッファを無効化
  select($newSock);
  $| = 1;
  select(STDOUT);
  #メイン。exitかquit打たれるまでechoするだけ。
  my $buf;
  while (uc($buf) ne 'EXIT' and uc($buf) ne 'QUIT'){
   $buf = <$newSock>;
   $buf =~ tr/\r\n//d;
   print $newSock "$buf\n";
  }
  print $newSock "Bye.\n";
  $newSock->close();
  exit;
 }
}

QooQ