2010-12-27 8 views
1

私はいくつかのクライアントが接続されたサーバーを持っています。 CTRL + Cがヒットすると(つまり、原子炉のシャットダウンが始まる)、すべての接続を閉じて、きれいに閉じられるまで待ってから停止します。私は接続された顧客の輸送機関を通って.loseConnection()と呼ぶことによってこれを行う。ローカルに接続されているものでは、すぐに切断されます。ただし、インターネット経由で接続されている場合は、すぐに接続が失われることはありません。通信は停止します。クライアントプログラムを終了すると、接続が終了したことをサーバーに知らせることもなくなりますが、それは.loseConnection()を呼び出す前に行われますが、数分後に接続が「失われた」とみなされません。サーバ。twisted .loseConnectionはすぐに接続を失うことはありませんか?

私は、接続が切断された場合、データを送信しようとしない限り、サーバーが知る方法がないことを理解しています。しかし、私が特に接続をクローズするように頼んだら、それはすぐに閉じる/すぐに切断しないのはなぜですか?私は間違った機能を呼んでいますか?

答えて

1

loseConnectionは、接続をシャットダウンする前に書き込みバッファをフラッシュします。それが起こるのを待っていたくない場合は、原子炉が停止する前に停止させてください。彼らはその方法で閉じられ、書き込みバッファ内の未送信データは破棄されます。

書き込みバッファを破棄して切断するAPIを追加する提案もあります(abortConnection)。

+0

私はリアクタをまだシャットダウンしたくありません。私は接続を中断したいだけです。現在の方法はありませんか? – Claudiu

+0

私はあなたがCtrl-Cについて話していたので、原子炉を閉めたいと思っていました。原子炉が停止していない場合は、接続を切断する必要があります。あなたはおそらく、(transport.connectionLost'のような)非公開/非公開のメソッドを使う方法もありますが、これらは常にサポートされているとは限りません。 –

関連する問題