none
WinInetのタイムアウト時間について

    質問

  • WinInetを使用したHTTP通信で、通信タイムアウト値を設定しようとしていますが

    WinInetの各種タイムアウト値が具体的にどのようなタイマなのかが理解できておりません。

    ご存知の方がいましたらご教授お願い致します。

    (合わせて該当のMSDNのURLがありましたら教えて頂けると幸いです。)

           

    ・INTERNET_OPTION_CONNECT_TIMEOUT

     説明に、「to use for Internet connection requests. 」

     とありますが、インターネット接続要求とはどのような接続でしょうか。

     サーバーとのTCPのハンドシェイクが完了するまでの時間と考えてよろしいでしょうか?

     サーバー側のLANを抜いた状態でHTTP通信した場合に期待した時間でタイムアウトしておらず

     何に対してのタイムアウト時間なのかがよく分かりません。

      

      補足)例えば、サーバー側のLANを抜いた状態でHTTP通信を行った場合

          このオプションに1秒を設定しても60秒を設定しても

          HttpSendRequest()からは必ず20秒で戻ってきています。

      

    ・INTERNET_OPTION_SEND_TIMEOUT

     HTTP通信として、HttpSendRequest()を使用していますが

     このオプションは、HttpSendRequest()内の送信処理としてのタイムアウト時間のようなイメージでよいでしょうか?

     個人的にはTCPレイヤで、サーバーからACKが返るまでの時間?ぐらいしか思いつきませんでした。。。

      

    ・INTERNET_OPTION_RECEIVE_TIMEOUT

     レスポンスのヘッダを受信するまでの時間でしょうか?

     それともレスポンスボディがある場合は、レスポンスボディまで受信するまでの時間でしょうか?





    • 編集済み mkzn 2018年5月31日 9:03
    2018年5月30日 6:41

回答

すべての返信

  • こちらのURLの説明ではいかがでしょうか。

    https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa385328(v=vs.85).aspx

    • 回答としてマーク mkzn 2018年5月31日 9:02
    2018年5月30日 22:16
  • ご回答ありがとうございます。

    ご指摘のURLは確認しましたが、

    より明確にタイムアウトの仕組みを知ることができないかと思い

    この質問を上げさせていただいております。

       

    例えば、サーバー側のLANを抜いた状態で

    INTERNET_OPTION_CONNECT_TIMEOUTに1秒や60秒を設定しても

    クライアントはほぼ20秒前後でタイムアウトしており

    何に対してのタイムアウト時間なのかがよく分かりません。

    2018年5月31日 1:28
  • -----------------------
    INTERNET_OPTION_CONNECT_TIMEOUT
    2
    Sets or retrieves an unsigned long integer value that contains the time-out value,
    in milliseconds, to use for Internet connection requests.
    Setting this option to infinite (0xFFFFFFFF) will disable this timer.
    If a connection request takes longer than this time-out value, the request is canceled.
    When attempting to connect to
    multiple IP addresses for a single host (a multihome host),
    the timeout limit is cumulative for all of the IP addresses.
    This option can be used on any HINTERNET handle,
    including a NULL handle.
    It is used by InternetQueryOption and InternetSetOption.

    INTERNET_OPTION_SEND_TIMEOUT
    5
    Sets or retrieves an unsigned long integer value, in milliseconds,
    that contains the time-out value to send a request.
    If the send takes longer than this time-out value, the send is canceled.
    This option can be used on any HINTERNET handle, including a NULL handle.
    It is used by InternetQueryOption and InternetSetOption.
    When used in reference to an FTP transaction,
    this option refers to the control channel.

    INTERNET_OPTION_RECEIVE_TIMEOUT
    6
    Sets or retrieves an unsigned long integer value that contains the time-out value,
    in milliseconds, to receive a response to a request.
    If the response takes longer than this time-out value, the request is canceled.
    This option can be used on any HINTERNET handle, including a NULL handle.
    It is used by InternetQueryOption and InternetSetOption.
    This option is not intended to represent a fine-grained, immediate timeout.
    You can expect the timeout to occur up to six seconds after the set timeout value.
    When used in reference to an FTP transaction, this option refers to the control channel.
    -----------------------

    なので、

    INTERNET_OPTION_CONNECT_TIMEOUT
    InternetConnect() 処理における1回の失敗までのタイムアウト。

    INTERNET_OPTION_SEND_TIMEOUT
    InternetWriteFile() / HttpSendRequest() / HttpSendRequestEx() 処理におけるタイムアウト。

    INTERNET_OPTION_RECEIVE_TIMEOUT
    InternetReadFile() / InternetReadFileEx() 処理におけるタイムアウト。

    ということなのでは?

    なんで INTERNET_OPTION_CONNECT_TIMEOUT の検証を、HttpSendRequest() でやるの?

    2018年5月31日 2:38
  • InternetConnect()で通信は行っていないですよね?

    (認識違っていたらすみません)

    これまでの検証の結果から、HttpSendRequest()でサーバーとのTCP接続から始まり

    質問に挙げてるタイマも、この関数内で適用されていると考えていました。

    2018年5月31日 4:35
  • HIDE0707 さんが提示されたドキュメント、ちゃんと読みました?
    私からの返信の黒字部分の意味、ちゃんと理解してますか?
    私の返信で示した英文情報は、HIDE0707 さんが提示されたドキュメントに記載されているものです。
    そして黒字部分が、あなたの求めている回答なのでは?
    (きちんと読んでいないのなら、HIDE0707 さんに失礼です。)

    • 回答としてマーク mkzn 2018年5月31日 6:23
    • 回答としてマークされていない mkzn 2018年5月31日 9:02
    2018年5月31日 5:53