#!/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";