Comments (5)
My understanding of this situation is that it is impossible, at the Java layer, to detect that the server has closed its side of the TCP socket, until we try to read data from it. I think that right now, the entire request is being sent, regardless of its length, and the EOFException is not being thrown until we try to read the status code from the response.
At the TCP layer, the client socket is sending several packets out to the server, which will sent RST packets back as soon as it receives them. Once the client gets the first RST, then I believe that it stops sending data out the network (it may be just black-holing what it receives from the application layer) but by then, quite a bit of data could have gone out, depending on the link latency and the window size.
It would be great if we could do a non-blocking read() on the socket before attempting to send, but I don't think Java sockets will let us do that; without switching the whole HTTP layer to nio; we may just have to send the whole request.
from okhttp.
I'm changing the code to silently recover from failed connections. This class should make it possible to recover if the failure occurs while we're streaming data to the server:
#138
from okhttp.
from okhttp.
@clelland how would doing a non-blocking read help?
from okhttp.
I'm pretty sure that doing a non-blocking read() call on a socket which has been closed will return 0 (to indicate EOF). At that point, we would know to close our end and reopen the connection.
The problem is that reading a java.net.socket is always going to wait for data; it has no way to know that the other end is closed until you write to it (and it tells you with an exception)
from okhttp.
Related Issues (20)
- The request body data added in the NetworkInterceptor was found not included in the capture by Charles. HOT 1
- The request body data added in the NetworkInterceptor was found not included in the capture by Charles
- Gzip/Deflate/Bortli not workin okhttp3 4.12.0/5.0.0-alpha12 HOT 5
- DiskLruCache entry?.currentEditor is allways not null for async requests HOT 1
- Documentation: Clearly state that OkHttpClient should be a singleton HOT 6
- downloading big file midway Report an error java.net.ProtocolException: unexpected end of stream HOT 1
- Investigate Lock vs Synchronized performance HOT 4
- okhttp-coroutines in alpha 13 contains core classes HOT 1
- okhttp3.internal.http2.StreamResetException: stream was reset: CANCEL HOT 1
- HTTPS proxy support HOT 17
- Cannot instantiate MockWebServer on alpha 14: java.lang.NoClassDefFoundError: okhttp3/internal/_UtilJvmKt HOT 3
- Failing while building okhttp version parent-3.6.0 using mvn clean install HOT 1
- QUERY support
- No callbacks: no successful callbacks and no failed callbacks HOT 4
- TaskRunner's concurrent performance exhibits a significant decline in case of poor networks conditions HOT 12
- Calling response.body.string() on a MockWebServer response throws a SocketTimeoutException HOT 5
- java.net.SocketException: socket is closed HOT 11
- UTF-32LE and UTF-32BE BOM are incorrect
- Huffman : Fatal Exception: java.lang.NullPointerException HOT 3
- Delayed sending request HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from okhttp.