errno 32 の壊れたパイプを防ぐにはどうすればいいですか? 質問する

errno 32 の壊れたパイプを防ぐにはどうすればいいですか? 質問する

現在、Python で構築されたアプリを使用しています。パソコンで実行すると、問題なく動作します。

しかし、これを本番サーバーに移動すると、次のようなエラーが表示され続けます。

調査したところ、サーバーがまだデータの送信に忙しいときにエンドユーザーのブラウザが接続を停止する理由がわかりました。

なぜこのようなことが起こったのか、また、私のパソコンでは正常に動作するのに、本番サーバーでは正常に動作しない根本的な原因は何なのか疑問に思います。アドバイスをいただければ幸いです。

    Exception happened during processing of request from ('127.0.0.1', 34226)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 284, in
_handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 310, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 641, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 694, in finish
    self.wfile.flush()
  File "/usr/lib/python2.7/socket.py", line 303, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe

ベストアンサー1

サーバー プロセスがSIGPIPEソケットへの書き込みを受信しました。これは通常、相手側 (クライアント側) で完全に閉じられたソケットに書き込むときに発生します。これは、クライアント プログラムがサーバーからのすべてのデータが受信されるまで待たずに、単にソケットを閉じる (close関数を使用) ときに発生する可能性があります。

C プログラムでは通常、SIGPIPEシグナルを無視するように設定するか、シグナル用のダミー シグナル ハンドラーを設定します。この場合、閉じたソケットに書き込むと単純なエラーが返されます。あなたの場合、Python はクライアントの早期切断として処理できる例外をスローしているようです。

おすすめ記事