|
はじめまして、いつもお世話になっております PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら タイムアウト処理を、と言ったことをしたいのですが、以下のプログラムでは うまく行きませんでした。TCPdumpで見てたところ、何回もSYNを投げなおした後 数分後にやっとエラーメッセージを表示してくれます。 よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく 最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後 エラーメッセージを出す動きをしていました。 何かアドバイスなど有りましたらよろしくお願いいたします なお、PerlのVersionはThis is perl, v5.6.1 built for i386-linux-thread-multi です $socket = new IO::Socket::INET ( PeerAddr => "$address", PeerPort => "$port", Proto => 'tcp', TimeOut => 10 ); unless ($socket) { print STDERR "Connection Error at $date\n"; close($socket); } |
|
>>2850 しっぽ > PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら その辺を管理するのは OS の TCP スタックなので、プログラム側 からはどうにもなりません。 > よくよく見てみたところ、リトライの間隔がTimeOutの設定に関係なく > 最初は3秒、次が6秒、12,24,48秒となっていて最後に96秒待った後 > エラーメッセージを出す動きをしていました。 これも、そういうものです。 Solaris だとタイムアウトまでの時間を変更できたしますが、その他の OS では変更できない可能性が高いです。 もし connect 時のタイムアウト処理をしたいという目的ならば、 ノンブロッキングソケットを使いましょう。 >>2847 mattu > パラメータが正常に送信されていないようなんです。 その判断が間違っているような気がします。そう判断するに至った 根拠が明示されていないので、ただのあてずっぽうですが。 |
|
ご回答ありがとうございます。 別にあてずっぽうではなく、サーバ側でデバックにて確認してみると、渡しているデータが入ってなかったのと、渡されたヘッダ・パラメータがファイルに出力されるようにしており、JAVAで作成したものでしたら正常に出力されるのですが、Cで作成したもので試してみるとヘッダの部分のみ出力されるのでそう思いました。デバック等にはVAJを使用しております。 言葉不足ですみませんでした。 |
|
>>2852 mattu - ボディの最後の \r\n は不要 (もし \r\n を付けるなら Content-Length は 10 であるべき。でも \r\n 付けていいのかな?) - リクエストに Content-Type ヘッダは不要 という点を直しても まだボディが渡らないようなら、その C のプログラムが おかしいんだと思います (てゆーか、Java でうまくいって C でうまくいかない なら、C の方を疑うべきでしょう)。 詳しくはこちらなど。http://www.studyinghttp.net/headers.html |
|
>>2845出来ました。ありがとうございます。 |
|
教えてください。 showmountコマンドは、OSのサポートバージョン等が制限されていますか。 showmountコマンドの実行制限が何かありましたら、教えてください。 |
|
ご回答ありがとうございます Cで作るHTTPクライアントの件ですが、やはりボディが渡りません。 ソースの方を確認しましたが、おかしいと思われる箇所は見つかりませんでした。 環境が原因で渡らないというのはあるんでしょうか? 現在はUNIX上でコンパイル・実行をしてWin2000上のVAJにつないでいるんですが、関係あるのでしょうか? また、ボディの書き方で何か注意しとくべきことありますでしょうか? よろしくお願いします。 |
|
>>2856 mattu > ボディの書き方で何か注意しとくべきことありますでしょうか? 結局何をどうしたのかわからないので、何とも言えません。 - VAJ をやめて別のサーバ (Apache など) にしてみる - パケットをモニタして、java 版と C 版の違いを調べる あたりをやれば何かわかるんじゃないでしょうか。 >>2856 mattu >>2855 シド とりあえず http://www.hyuki.com/writing/techask.html を読んでみてください。 |
|
>>2851 68user ご回答ありがとうございます そんな気はしてたのですが、やっぱりそうですか ただ、TimeOut => 10 の所は何に反映されるのかってのがちょっと気になりました。 確か<$socket>やsysreadで読んだときに読むべきデータがないと TimeOutの時間を過ぎても返ってこなかったと思いますので… >ノンブロッキングソケットを使いましょう。 これってつまりは「読むべきデータが無いときに待たない」って 事ですよね。Perlでは使えますでしょうか?? 確立時の話じゃないですけど、Cのrecvなんかは待たないので 便利だったり不便だったりといった感じではあったのですが… |
|
>>2850 しっぽ > PerlでTCPのSYNを一度だけ投げて任意の時間内にSYN ACKが返ってこなかったら > タイムアウト処理を、と言ったことをしたいのですが この目的を聞かせてください。connect で数分待ってしまうのがイヤだから なんとかしたい、ということだと受け取ったのですが、 > Cのrecvなんかは ということは、read/write のタイムアウト管理 {が or も} 目的なのですか? |
|
>>2850 しっぽ IO::Socket::INETなんて高級な物を何故そこで使うのかがわかりませんが、 http://www.cotse.com/sw/portscan/halfscan.c のプログラムと同等のことをPerlからやりたいなら、 http://search.cpan.org/doc/SKOLYCHEV/Net-RawIP-0.09d/RawIP.pm でなんとかできませんか? libpcapのラッパーなのでそれがmakeに要る ようです。 タイムアウトは、 >なお、PerlのVersionはThis is perl, v5.6.1 built for i386-linux-thread-multi です とのことですから、threadを使ってなんとかできそうですが Perlのthreadなんて使ったこと無いのでどうなのか知りません。 Rubyなら http://www.goto.info.waseda.ac.jp/~fukusima/ruby/pcap-j.html なんてのもありますがこっちは目的の機能は無いようにみえます。 |
|
未だRedhatで名前解決できず、気が向いては眺め、弱っています。 Redhat7.1.94(雑誌に付属)を再インストールしてみましたが、 症状は変わりませんでした。 >>2814 68user [netstat -s]は、どういった項目をどのような観点から観察したらよいでしょうか? 使ったことも知識も無いので、よかったら今後のためにもアドバイスください。 >>2779 has いまさら経緯の説明をはじめるのも遅すぎかとは思うのですが、 そもそもこういった状態になったのは、LANからインターネットへの回線が ISDNからADSLに変わり、それと同時に各ユーザマシンに割り当てられるIPが グローバルIPからプライベートIPに変わってからでした。 それまではRedhatからでも名前解決に時間がかかりながらも なんとかアクセスできていました。 # Win2kとのデュアルブートなんですが、ADSLになる以前からも、 # Win2kは素早く名前解決できてRedhatで時間がかかるという差が # あったことが、既におかしかったのかもしれません… とりあえず現在の状況はこんな感じでうまくいっていません。 以上ご報告まで。 |
|
はじめまして。 HP-UX11のインストールをされた方がいらしたら幸いです。 質問があります。 locale -a で表示されていないロケールを、OSインストール後に、個別でインストールできるでしょうか?OSの入れなおししか、方法は無いでしょうか? # setenv LANG japanese を設定しても、Warningが出てしまいます。何とか個別でインストールしたいのですが・・・ 乱文ですみません。よろしくお願いします。 |