Christoph, My $0.2
Typically you see RST packet when the data come to a *closed* socket. You shouldn't get RST if client/server communication shutdown properly. Also balancer may take a care about connection shutdown (it needs to update internal tables) so it's possible that you never get RST after balancer. Moreover, there are RST based attack and scanning methods so firewall might be set to reject RST packets and doesn't pass it to inside network. I.e. IMHO, customer server should be updated to live without RST. -Dmitry On 2016-07-13 18:29, Langer, Christoph wrote: > Hi folks, > > > > I have a question to the experts - regarding an issue that was reported > to me by a customer. > > > > In the customer scenario they are running a Servlet engine and the > Servlet is constantly sending data to a browser client. When the browser > client is closed, the server does not get a notification of the other > end having been terminated and is constantly sending out data and > blocking an application thread. I’m under the assumption that the server > should get an RST packet from the network upon writing/flushing data to > the OutputStream as soon as the client is gone and hence an Exception > should pop up but this isn’t happening. > > > > There is a load balancer and maybe other network infrastructure involved > in between the Servlet JVM and the browser client. We did some TCPDUMP > tracing at the load balancer and we could not see an RST packet coming > in from the client side. But when I’m running the scenario without all > this network infrastructure involved, e.g. between servers and clients > in the same network, I would always observe an RST packet once I close > the browser. A FIN packet is received, too, but this does not lead to an > Exception and to all my knowledge this can’t be detected, not from the > java Socket API and even less from the Servlet API which is just dealing > with Streams. > > > > So my question to the experts is most of all: Would you agree that an > RST packet should be generated in the network and received by the > server? Or is it a normal behavior that servers must deal with not > receiving RSTs and hence needing to wait for a timeout until e.g. the > load balancer generates an RST? Also, is there any way to detect a FIN > in the JVM and react on it? > > > > Thanks in advance and best regards > > Christoph > > > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.