java.net.SocketException: Connection reset
This SocketException occurs on the server side when the client closed the socket connection before the response could be returned over the socket. For example, by quitting the browser before the reponse was retrieved.
Connection reset simply means that a TCP RST was received. TCP RST packet is that the remote side telling you the connection on which the previous TCP packet is sent is not recognized, maybe the connection has closed, maybe the port is not open, and something like these. A reset packet is simply one with no payload and with the RST bit set in the TCP header flags.
The following are possible causes for the error:
- More commonly, it is caused by writing to a connection that the other end has already closed normally. In other words an application protocol error.
- A Reset (RST) packet is received from a remote machine and interrupts the established connection. The sent RST packets may indicate that the TCP packets sent are not recognized, a connection between the local and remote machine is broken, or a particular port is closed and is not allowing for communication.
- The TCP (Transmission Control Protocol) socket is closed because the socket received a close command from a remote machine.
- The other end has deliberately reset the connection. It is rarely happens, and generally incorrect, for application software to do this, but it is not unknown for commercial software.
- In Windows, 'software caused connection abort', which is not the same as 'connection reset', is caused by network problems sending from your end.
- It can also be caused by closing a socket when there is unread data in the socket receive buffer.
- In some cases, an intervening firewall or even the remote host itself might "forget" about your TCP connection. This could happen if you don't send any data for a long time (120 minutes is a common time-out), or because the peer was rebooted and lost its information about active connections. Sending data on one of these defunct connections will cause a RST too.
- Sometimes this can also be due to heavy load causing Server to queue the message and before it can read the message is got timed out at the client end. So you can also check server health and log for excessive load causing this error.
SocketException is a subclass of IOException so it's a checked exception. It is the most general exception that signals a problem when trying to open or access a socket. The full exception hierarchy of this error is:
As you might already know, it's strongly advised to use the most specific socket exception class that designates the problem more accurately. It is also worth noting that SocketException , usually comes with an error message that is very informative about the situation that caused the exception .
What is a socket programing?
It is programming concept that makes use of socket to establish connection and enables multiple programs to interact with each other using network . Sockets provide an interface to establish communication using network protocol stack and enables programs to share messages over network.
Sockets are endpoints in network communications . A socket server is usually a multi-threaded server that can accept socket connection requests . A socket client is a program/process that initiates a socket communication request .
Example of a basic Java Socket Programming