#!/usr/local/bin/perl
#
# Perlによる単純辞書サーバ
#
require 'clientserver.pl';
%clientsock = ();
$fhtemplate = 'FH000';
&serveropen(5678,'INITSOCK');
$SIG{'INT'} = 'finish';
sub finish { $finish = 1; }
&dicread;
for(;;){ # サーバの無限ループ
last if $finish;
$bits = '';
vec($bits,fileno(INITSOCK),1) = 1;
for(keys %clientsock){
vec($bits,fileno($_),1) = 1;
}
if(select($obits=$bits,'','',100)){
if(vec($obits,fileno(INITSOCK),1)){ # 接続要求
$fh = $fhtemplate++;
accept($fh,INITSOCK) || die $!;
select($fh); $| = 1; select(stdout);
$clientsock{$fh} = 1;
}
for $fh (keys %clientsock){
if(vec($obits,fileno($fh),1)){ # クライアント要求
$_ = <$fh>;
if($_ eq ''){ # 接続終了要求
close($fh);
delete $clientsock{$fh};
}
else {
chop;
&client_request($fh,$_);
}
}
}
}
}
sub client_request {
local($fh,$req) = @_;
local($s);
&lookup($req);
$s = '';
for $i (@match){
$s .= "$e[$i]\t$j[$i]\r";
}
print $fh "$s\n";
}
sub dicread { # #1と同じ
sub lookup { # #1と同じ