[Perl]
タイムアウトの処理にはALRMシグナルを使用します。以下の例ではWHOISサーバにWHOIS情報の取得にいきます。サーバへのコネクションのタイムアウトはdieで強制終了しますが、実際にはサーバとのコネクションよりも、データを受け取るまでにタイムアウトが起きるようです。そのため、一定時間内にデータを受信できなかった場合、サーバに接続し直し、再度情報を取得するようにしています。
!/usr/bin/perl
my $whois_result;
while(!$whois_result){
($whois_result) = &GET_WHOIS('ksknet.net', 'whois.nsiregistry.com:43');
}
sub GET_WHOIS{
my($domain) = shift;
my($whois_server) = shift;
use IO::Socket;
my ($socket, @result);
print "Get whois info for $domain\n";
print "Connecting to $whois_server\n";
print $scoket = IO::Socket::INET->new(PeerAddr => "$whois_server",
Timeout=>3) || die $!;
print "\tConntected\n" if($socket);
eval {
local $SIG{ALRM} = sub { die "timeout\n" };
alarm (5); #タイムアウトまでの時間
###タイムアウトまでに行う処理###
print $socket "$domain\n";
@result = <$socket>;
###タイムアウトまでに行う処理###
alarm (0);
};
alarm(0); #eval{}の外で0にするのを忘れずに。
$socket->close() || die $@;
#タイムアウト時の処理
if ($@ =~ /timeout/){
print "Timeout occured while recieving data! Retrying...\n";
return();
}
return($result);
}
|
初めてのPerl ¥ 3,780 / 売り上げランク: 10349 / 379 ページ いわゆるリャマ本として知られる定番書 初めてのとあるが初心者向きではないと思う。 よくできてはいるが、、。 |
|
新版Perl言語プログラミングレッスン入門編 ¥ 2,835 / 売り上げランク: 15202 / 512 ページ 非常に分かりやすい。 今までにも様々な参考書に目を通してきていたが、その中でもこの本かなり読みやすく、丁寧に書かれていた。 初心者には特にお勧め。 初心者以外の方でも軽く目を通す価値はあると思う。 |
|
Code Reading―オープンソースから学ぶソフトウェア開発技法 ¥ 5,460 / 売り上げランク: 22828 / 523 ページ CodeCompleteとCodeReadingを併せて読むとよいと、 組込み系のSESSAMEプロジェクトのメーリングリストと、 OS系のTOPPERSプロジェクトのメーリングリストで推薦を受けました。 CodeCompleteは読んだことがあったので、CodeReadingを読んでいます。 オープンソースを仕事にしているので、たいへん役立っています。 MISRA-Cは研修で取り上げてきたので、本書も研修の資料としても取り上げるように準備中です。 |



