2011-06-28 7 views
3

初心者の質問...ただ、ここでは必ずしようとしている。..C#.Netソケットキープアライブタイム?ここ

これはない HTTPキープアライブ質問です。

一定の時間が経過した後にソケットがclosed()になることを確認する方法はありますか?

...すぐに私は近いソケット場合、クライアントは間違ったパスワードなどのように示すために、パケットを受信しない場合がありますので、私はこれを求めているのはなぜ..

は、ソケット内のコマンドに建てられたような任意のタイムアウトがありますか?

私はそれを自分自身試したことがない代替ソリューション

答えて

2

の思考を、それを閉鎖するタイマーやイベントを構築避けるためにしようとしているが、LingerOptionがあります。

Socket.LingerState Propertyをご覧ください。

このプロパティは、データが を送信することが残っている場合、接続指向 接続がクローズする 呼び出し後に開いたままになります 時間の長さを制御します。 データをピアに送信するメソッドを呼び出すと、このデータは発信ネットワークバッファ に格納されます。この プロパティは、Closeメソッドが 接続を削除する前に、 このデータがリモートホスト に送信されるようにするために使用できます。

+0

私は正しく使用していない可能性がありますか? 'socket.LingerState = new LingerOption(true、3); socket.Send(新しいバイト[] {0}); socket.Close(); 'ゼロバイトだけを10回送信する...ええと、私はそれらを開いたままにしておきます。遅かれ早かれ閉じようとします。 – SSpoke

+0

' socket.NoDelay = true'を設定してみてください。 「3」を増やして「30」と言います。 –

+0

変更なし。 'socket.LingerState = new LingerOption(true、30); socket.NoDelay = true; '送信ネットワークバッファ上に置かれたデータがしばらくそこにとどまることを意味していると思います。多分、1分であろうとも、待っている時間が長すぎて、私のクライアントは3〜5秒でタイムアウトすることさえあります。 – SSpoke

0

私はあなたがTCPプロトコルについて話していると仮定します。
何かがクライアントによって受信されたことを確認したい場合、クライアントは最後に受信したメッセージ(悪いパスワードなど)の応答を送信する必要があり、確認を受信した後、またはreadtimeout。

+0

クライアントは応答を送信しません。クライアントを変更するアクセス権がありません。正直なところ私が望むのは、偽のクライアントからのデッドロックされた接続がテルネットなどのクライアントであることを避けることです。これらの偽のクライアントになぜ切断されたのかを伝えたいと思っています。 C++では、 'setsocketopt'でこれを行うことができます。 – SSpoke

+0

http://msdn.microsoft.com/en-us/library/e160993d.aspx - ソケットオプションにアクセスするCの方法。 – weismat