DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C#でSocketアプリ作成時のタイムアウト制御方法

環境/言語:[OS : Windows 7 / 言語 : C# / .NET Framework : 3.5]
分類:[.NET]

【解決したい問題】

初めて質問させていただきます。
Windows7 / C#4.0 / .NET4 を使用して、TCPサーバー(非同期・ノンブロッキング)のアプリを作成しています。

プログラムでNetWorkStream.BeginWrite()を行い、TCPパケットに乗ってデーターが相手側デバイスに出力されるのを確認しました。
しかし、相手側デバイスからACKパケットが300msec確認出来なかった時、ReTryパケットがアプリ(OS?)から自動出力されます。

このReTryパケットが自動送信される初回タイムアウト時間(300msec)を、アプリで制御する方法(タイムアウト時間を延ばす)があればご教授頂ければと思います。

よろしくお願いいたします。

※パケットの流れはWireSharkを使用して確認しました。
※タイムアウトを延ばしたいのは、相手側デバイスがReTryパケットを受信すると誤動作する時がある為です。(修正はあまり期待出来ません)
2013/01/28(Mon) 01:13:15 編集(投稿者)

アプリ層で管理するものではないので、レジストリを変更する、つまり、すべてのアプリ・サービスに影響する方法ぐらいしか手立てがなさそうに思っています。(私が知らないだけであるかもしれません)

参考:
http://support.microsoft.com/kb/170359/ja
http://social.msdn.microsoft.com/Forums/ja/vcgeneralja/thread/1e53e746-8cb8-46ed-a387-e837ac4a091a


ただ、何らかの方法で実現できたとしても、そのデバイスの使う範囲によっては適用できないかもしれません。
たとえば、閉じた身内しか使わないならレジストリを変えてほしいといえるかもしれませんが、顧客にデバイスを適用するような場合だと変更すると他のデバイス・サービスに影響を与えることで受け入れられないということも考えられます。
■No31270に返信(Azuleanさんの記事)
> アプリ層で管理するものではないので、レジストリを変更する、つまり、すべてのアプリ・サービスに影響する方法ぐらいしか手立てがなさそうに思っています。(私が知らないだけであるかもしれません)

Azuleanさん ご回答有難うございます。
参考のURLを元に、Winsock2の仕様等も確認してみました。
やはり、レジストリのみの設定な感じですね。

「解決済み」とさせて頂き、別な手法が見つかったら改めてフォローさせて頂きたいと思います。

有難うございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板