gevent パッチを適用したソケットを使用してストリーミング サーバーに接続し、adsl 接続を使用しています。
私はサーバーを制御していませんが、私のテストでは、サーバーを停止すると、recv の結果が空の文字列かどうかを確認するだけで切断を検出できますが、adsl モデムをオフにすると recv は終了しません。コンピューターのネットワーク ケーブルを外しただけでは、空の文字列は返されませんが、再接続すると、その間にサーバーが送信したすべてのものが返されるので、ルーターまたはモデムが接続を開いたままにしているのだと思います。ネットワークケーブルが切断されている間、ストリームをバッファリングします。
socket.SO_RCVTIMEO を数秒に設定しようとしましたが、切断が検出されず、recv は永久に「ブロック」し続けます。これは gevent であるため、グリーンスレッドをブロックするだけですが、再接続を試行できるように、この切断をできるだけ早く検出する必要があります。