マルチポストすいません。webprog板でも質問したのですが回答頂けなかったのでこちらでも質問させてください。

ttp://joe.ash.jp/pc/netprog/ftp.pl.txt
ここにあるFTP転送スクリプトを一定時間サーバーの応答がなければ
実行を止めるというタイムアウト処理をするように書き換えようと思います。
alarm関数でなくselectでタイムアウト処理をしようと思いますが
以下のようにftp_recvを書き換えてみましたがタイムアウト処理が
行われません。どうしたら良いかご教授願います。

sub ftp_recv {
 my ($sock) = @_;
 my ($buf, $rc, $cont, $msg);
 my $rin = '';
 my $rout;
 my $ftp_timeout = 10.0;

 $rc = 0;
 vec($rin, fileno $sock, 1) = 1;
 die unless select $rout=$rin, undef, undef, $ftp_timeout;
 while (chomp($buf=<$sock>)) {
  die unless select $rout=$rin, undef, undef, $ftp_timeout;
  print "$buf\n";
  $buf =~ /^(\d\d\d)([ |-])(.*)/;
  $rc = $1; $cont = $2; $msg = $3;
  if ($cont ne '-') { last; }
 }
 return($buf);
}