プロが教えるわが家の防犯対策術!

UNIX + Cで作成しています。

あるプログラムで、FTPコマンド※を発行し、
遠隔のサーバ(サーバはLINUX)に置かれているファイルを取得しようとしています。
※system("FTP ~~~ bye")

単発でファイルを取得する場合は問題ないのですが、
連続してファイルを取得しようとした場合、数時間動きつづけた後、
FTPコマンドを発行した状態でフリーズしてしまう現象が起こります。(100%かは分かりませんが、再現性はあります。)

なぜこのような現象が起こるのでしょうか?
連続してのFTPコマンド発行は問題があるのでしょうか?

A 回答 (4件)

ここまでに書かれた症状だけではなんとも診断のしようがないのですが,ファイル転送1つにつきftpを1回起動するのをやめるのが根本的解決になるとおもいますよ.


繰り返し長期間にわたって転送するのなら,ftpは1回だけ起動して,それに
getコマンドを繰り返し与えるというふうにするか,あるいはftpなんかフリーでソースが転がっているので,自分のプログラムの中に組み込んでしまうか.
    • good
    • 0

ある程度の時間の中で一定回数以上 ftp サーバにアクセスするために, 「ftp サーバに対する攻撃」と勘違いされている可能性はあ

りませんか?

この回答への補足

その可能性はあるかな、と思ったりもしてます。
「ftp サーバに対する攻撃」だと、サーバ側はどのように判断するのでしょうか?
なにか設定があるのでしょうか?
(サーバはLinuxです)

しかし、ちょっと違う気もします。
フリーズする現象が発生すると、そのサーバへはTelnetでもFtpでも繋がらなくなりますが、
具体的には繋がらないというより、
繋がるがユーザ認証・ログインができない、が正しいように思います。
PCからTelnetやFtpコマンドを打つと
ユーザ名、パスワードを聞いてはくるが、その後固まるので。
さらに、そのサーバではログオフやユーザ切替すらできません。
やはり、どこか領域を壊して動けなくなっているのでしょうか?
でもそのサーバからは別のサーバへTelnetでもFtpでも繋がるんですよね。。。

補足日時:2006/03/11 22:01
    • good
    • 0

補足


gdbの使い方を知っているなら,フリーズしたように見える状況で実際何が起きているかgdbで調べてみるのが早道でしょう.
    • good
    • 0

本当にフリーズしているのかどうか,psコマンドとかvmstat,netstatなどで調べてみてはどうでしょうか.



ftp自体は正常に起動できているがメモリリークを起している,とか,ftpコマンド終了時の後始末がなにかがうまくいって無くて,TCPポートを使い潰しているとか,ファイルディスクリプタを何か閉じ忘れているとか,いうことが想像できます.

この回答への補足

プログラム中でsystem("FTP ~~ bye")を連続して行っているとき、サーバ、クライアント側それぞれでpsコマンドで確認しても不要なプロセスは溜まっていませんでした。

TCPポートに関しては、サーバ、クライアント側それぞれでnetstatで見たところ1400個くらいがFTPで使われていて、ほとんどがTIME_WAIT状態でした。
これは、プログラムを停止させると序々に減っていき、最終的にはなくなりそうですが。

根本的なところですが、
クライアント側は
 (1)system("FTP ~~ bye")
 (2)popen("FTP ~~ bye") + pclose( )
などを行うのみで、特に後始末的な処理はないと思っているのですが、間違っていますか?

補足日時:2006/03/10 10:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています