I/O error during system call, Connection reset by peer Problem mit S3 client
Habe ich diese Ausnahme gelegentlich bei versuchen zum hochladen von Dateien (Bild, audio) S3. Gibt es irgendeine Lösung dafür?
Konfiguration: Android 4x, 5x, aws-android-sdk-s3 version 2.2.14.
Unable to execute HTTP request: Write error: ssl=0x9ab52680: I/O error during system call, Connection reset by peer
javax.net.ssl.SSLException: Write error: ssl=0x9ab52680: I/O error during system call, Connection reset by peer
at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:766)
at com.android.okhttp.okio.Okio$1.write(Okio.java:76)
at com.android.okhttp.okio.AsyncTimeout$1.write(AsyncTimeout.java:155)
at com.android.okhttp.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at com.android.okhttp.okio.RealBufferedSink.write(RealBufferedSink.java:46)
at com.android.okhttp.internal.http.HttpConnection$FixedLengthSink.write(HttpConnection.java:302)
at com.android.okhttp.okio.RealBufferedSink.emitCompleteSegments(RealBufferedSink.java:176)
at com.android.okhttp.okio.RealBufferedSink$1.write(RealBufferedSink.java:198)
at com.amazonaws.http.UrlHttpClient.write(UrlHttpClient.java:172)
at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:129)
at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:65)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:360)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4221)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1628)
at net.tandem.ext.aws.AmazonUtil.uploadFile(AmazonUtil.java:131)
at net.tandem.ext.aws.AmazonUtil.uploadFile(AmazonUtil.java:65)
at net.tandem.service.MessageService$2.doInBackground(MessageService.java:323)
at net.tandem.service.MessageService$2.doInBackground(MessageService.java:315)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung ist, wiederholen Sie die Anfrage.
Connection reset by peer theoretisch bedeutet, dass die far-end-server die Verbindung zurückgesetzt, aufgrund einer Störung in der Kommunikation oder ein interner Fehler, obwohl in der Praxis, fortgeschrittene Ausrüstung (insbesondere firewalls und NAT - /PAT-Geräte) können auch für Handwerksbetriebe eine Antwort Paket generiert wird, die gleiche Fehlermeldung.
In der Regel, obwohl dies interpretiert werden als eine Folge der Verkehr auf dem Internet-manchmal Dinge schief gehen, die außerhalb Ihrer Kontrolle.
Dieser Zustand sollte nur anzeigen, dass Sie etwas falsch machen (etwas, das man korrigieren kann), wenn die gleiche Anfrage mehrfach ein Fehler ausgelöst, während andere Anträge erfolgreich sind.
Ich hatte den gleichen Fehler, aber es war wegen der Zeitverschiebung zwischen den Android-Geräten und dem server (Zeitverschiebung).
Als ich begann Herumspielen mit der Uhrzeit und die Zeitzone des Geräts fand ich ein Muster zu reproduzieren die gleiche Fehlermeldung (es war nicht zufällig, mit einem bestimmten Datum und Zeitzone auf dem Gerät die upload - /download immer fehlgeschlagen).
Wenn das der Fall ist, das Update ist die Verwendung der s3client.setTimeOffset() zum korrigieren der Schräglage zwischen den Geräten und dem s3 server.
Edit:
Dies ist, wie ich die Uhrzeit eingestellt skew auf der Geräte-code:
In der Methode
getUTCTimeInMillis()
bekomme ich die Zeit von einem externen server, ich weiß, es gibt die aktuelle Zeit im UTC-Format.Hoffe, es hilft.
timeOffset
oder ändern Sie die Zeitzone auf dem Gerät-Einstellungen, um herauszufinden, was ist die Zeitverschiebung, die du hast. Auch do-check-dieser Beitrag: stackoverflow.com/questions/30565422/...Habe ich nur dieses Problem, aber es scheitert immer mit der
Connection reset by peer
. Ich bin das AWS SDK nicht verwenden, aber OkHttp direkt (v 3.9.1).Das problem in meinem Fall gelöst wurde, wenn ich ersetzt OkHttp mit Java
HttpURLConnection
. Mein Android-Kotlin-code ist inspiriert von AWS-Dokumentation Beispiel: