Coder Social home page Coder Social logo

Comments (5)

clelland avatar clelland commented on May 18, 2024

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.

swankjesse avatar swankjesse commented on May 18, 2024

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.

swankjesse avatar swankjesse commented on May 18, 2024

#153

from okhttp.

swankjesse avatar swankjesse commented on May 18, 2024

@clelland how would doing a non-blocking read help?

from okhttp.

clelland avatar clelland commented on May 18, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.