Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#!/usr/local/bin/perl -w
# $Id: udp-client-1.pl,v 1.1 2002/02/17 10:19:18 68user Exp $
use Socket; # Socket モジュールを使う
use Errno; # Errno 定数モジュールを使う
if ( @ARGV != 2 ){
print "引数で [接続先ホスト名] [接続先ポート番号] を指定して下さい。\n";
exit;
}
# 接続先ホスト名を取得
$host = shift @ARGV;
# 接続先ポート番号を取得
$port = shift @ARGV;
# ホスト名を、IP アドレスの構造体に変換
$iaddr = inet_aton($host)
or die "$host は存在しないホストです。\n";
# ポート番号と IP アドレスを構造体に変換
$sock_addr = pack_sockaddr_in($port, $iaddr);
# ソケット生成
socket(SOCKET, PF_INET, SOCK_DGRAM, 0)
or die "ソケットを生成できません。\n";
# send する回数
$num_of_senddata = 100000;
# ENOBUFS が発生した回数
$num_of_enobufs = 0;
for ( $i=1 ; $i<=$num_of_senddata ; ){
if ( ! send(SOCKET, "Hello $i", 0, $sock_addr) ){
# エラーが発生した
if ( $! == Errno::ENOBUFS ){
# 送信バッファがいっぱい (ENOBUFS) ならリトライ
$num_of_enobufs++;
next;
} else {
# ENOBUFS 以外なら終了
die "send に失敗しました ($i)。$!\n";
}
}
$i++;
}
print "$host:$port に対して send を $num_of_senddata 回実行しました。\n";
print "ENOBUFS の発生回数 $num_of_enobufs\n";