none
FTPが途中で止まる RRS feed

  • 質問

  • windows7(SP1)の端末を起動した際に立ち上がる(スタートアップにショートカットを登録した)アプリケーションについて
    以下の現象が発生しました。
    現象はこれまでに2回発生しています。
    アプリケーションは、端末起動時にUNIXサーバからFTPにてファイルを取得します。
    FTPにはCFtpConnection::GetFileを使用しています。


    <環境>
    OS:windows7 SP1
    アプリケーション開発ツール:VC6.0
    office:2010


    <現象>
    ・1回目
    ①端末起動。
    ②アプリケーションが立ち上がる。
    ③アプリケーションがサーバ機からFTPにてファイルを取得。
    ④ファイル取得が途中で止まる。
     →ファイル保存先で取得中のファイルの容量を監視したところ、
      途中までサイズが増加するが、あるサイズで止まってしまい、
      アプリケーションが終了しなくなった。
      ネットワークは正常に動いていた。
    ⑤30分ほど待ったが、状況は変わらない。
    ⑥タスクマネージャにてアプリケーションを強制的に終了。
    ⑦その後、端末再起動やアプリケーションのみの起動を実施したが、
     復旧せず。
    ⑧数回⑦を実施したところ、正常にFTPが完了しアプリケーションが終了。
    ⑨イベントビューアを確認したところ、該当アプリケーションについて
     イベント名が「AppHangB1」のエラーが発生していた。
    ⑩UNIXサーバのシステムログには何もエラー等は出ていなかった。
     
    ・2回目
    ①端末起動。
    ②アプリケーションが立ち上がる。
    ③アプリケーションがサーバ機からFTPにてファイルを取得。
    ④ファイル取得が途中で止まる。
     →ファイル保存先で取得中のファイルの容量を監視したところ、
      途中までサイズが増加するが、あるサイズで止まってしまい、
      アプリケーションが終了しなくなった。
      ネットワークは正常に動いていた。
    ⑤30分ほど待ったが、状況は変わらない。
    ⑥タスクマネージャにてアプリケーションを強制的に終了。
    ⑦イベントビューアを確認したところ、該当アプリケーションについて
     イベント名が「AppHangB1」のエラーが発生していた。
    ⑧AppHangB1について調べたところ、
     Normal.dotmファイル(wordの書式等保存したファイル?)を初期化すれば
     復旧するとの記述があったため、Normal.dotmをリネーム。
    ⑨再起動を実施したところ、正常にFTPが完了しアプリケーションが終了。
    ⑩UNIXサーバのシステムログには何もエラー等は出ていなかった。


    <FTPを取得する箇所のソース>
    DLLEXPORT int  WINAPI c_ftpget( const char *host, const char *usrname, const char  *passwd, int mode, const char *lfile, const char *rfile )
    {
      CInternetSession ses;
      CFtpConnection *ftp;
      BOOL sts;

      // FTPサーバに接続
      TRY {
        ftp = ses.GetFtpConnection(host, usrname, passwd);
      }
      CATCH(CInternetException, ex)
      {
        char msg[256];
        UINT id;

        ex->GetErrorMessage(msg, sizeof(msg), &id);
        return -1;
      }
      END_CATCH

     //ファイルをゲット
      DWORD flag = ((mode == 1)  || (mode == 3))
         ? FTP_TRANSFER_TYPE_ASCII : FTP_TRANSFER_TYPE_BINARY;
      flag |= INTERNET_FLAG_DONT_CACHE;
      sts = ftp->GetFile(rfile, lfile, FALSE, FILE_ATTRIBUTE_NORMAL, flag);
      if (sts) {
        if ((mode == 2) || (mode == 3))
          ftp->Remove(rfile);

        ftp->Close();
        return 0;
      }
      else {
        ftp->Close();
        return -1;
      }
    }

    modeは3で本関数c_ftpgetを呼んでます。
    FTPで取得したファイルはGetFileした後のftp->Remove(rfile)で削除されるはずですので、
    上記の通り、(FTP中のファイルがあるサイズで止まってしまう=GetFileで止まっている)
    と考えられます。


    <質問事項>
    1.CFtpConnection::GetFileを使用したファイル取得が途中で停止する原因として
      何か考えられることはありますでしょうか?
      これまでに同じような事象はありますでしょうか?
      何か考えられる解決策等はありますでしょうか?
    2.「AppHangB1」について、AppHangB1はどのようなエラーで、どのような原因で
      発生するのでしょうか?
      タスクマネージャでアプリケーションを強制終了したことが原因で発生したのでしょう?
      FTPが停止する現象と何かしらの関連性はあるのでしょうか?
    3.1回目と2回目の違いとしては、Normal.dotmファイルの初期化有無ですが、
      Normal.dotmファイルはどのようなファイルなのでしょうか?
      FTPが停止する現象と何かしらの関連性はあるのでしょうか?
      
    質問が多くて申し訳ありませんが、よろしくお願い致します。

    2012年4月20日 6:27

すべての返信

  • 返信がついてないようなので

    <質問事項>

    1.CFtpConnection::GetFileを使用したファイル取得が途中で停止する原因として
      何か考えられることはありますでしょうか?
      これまでに同じような事象はありますでしょうか?
      何か考えられる解決策等はありますでしょうか?
    2.「AppHangB1」について、AppHangB1はどのようなエラーで、どのような原因で
      発生するのでしょうか?
      タスクマネージャでアプリケーションを強制終了したことが原因で発生したのでしょう?
      FTPが停止する現象と何かしらの関連性はあるのでしょうか?
    3.1回目と2回目の違いとしては、Normal.dotmファイルの初期化有無ですが、
      Normal.dotmファイルはどのようなファイルなのでしょうか?
      FTPが停止する現象と何かしらの関連性はあるのでしょうか?

    とりあえず MS へ質問するような内容で?を羅列されては、返信がつきにくいと思いますよ。

    以下は個人見解です。

    1.考えられることは? -> 通信不良ではないでしょうか?

    1.同じような事象は? -> 個人的にはよくあることですが、同じような事象があったとは言えないので・・・。

    1.解決策等は? -> VC6 を使用しない、CFtpConnection を利用しない、etc ...

    2.どのような原因で? -> UI スレッドのデッドロックによる App 無応答の可能性が高いと思いますが、根拠はなんとなくです。

    2.強制終了が原因? -> 無応答なら強制終了するしか落せないので・・・。

    2.FTP停止との関連性? -> CFtpConnection::GetFile 内で無応答になってるならそうなりますよね?

    3.どのようなファイル? -> 検索してみたら Word ドキュメントのデフォルトテンプレートのようですね。

    3.FTP停止との関連性? -> 普通に考えれば本来無関係でしょうが、直ったというなら必ずしも無関係ではないかもしれませんね。

    • 回答の候補に設定 山本春海 2012年5月23日 8:21
    2012年4月24日 12:00