IO::Socket でサーバ実装

2012年1月9日月曜日

perl

t f B! P L

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/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