Apache Commons http クライアントを使用して、post メソッドを使用して URL を呼び出し、パラメータを投稿していますが、まれに以下のエラーが発生します。
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
at org.apache.commons.httpclient.methods.ByteArrayRequestEntity.writeRequest(ByteArrayRequestEntity.java:90)
at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
この例外の原因とデバッグ方法を提案してくれる人はいますか?
ベストアンサー1
この原因は次のとおりです:
- 最も一般的なのは、相手側がすでに接続を閉じているときにその接続に書き込むことです。
- あまり一般的ではありませんが、ピアは、自分の側ですでに保留中のすべてのデータを読み取らずに接続を閉じます。
したがって、どちらの場合も、アプリケーション プロトコルの定義または実装が不十分です。
ここでは説明しませんが、3 つ目の理由として、ピアが接続を適切に閉じるのではなく、意図的にリセットするアクションを実行することが挙げられます。