There are several possible causes.
-
The other end has deliberately reset the connection, in a way which I will not document here. It is rare, and generally incorrect, for application software to do this, but it is not unknown for commercial software.
-
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.
-
It can also be caused by closing a socket when there is unread data in the socket receive buffer.
-
In Windows, ‘software caused connection abort’, which is not the same as ‘connection reset’, is caused by network problems sending from your end. There’s a Microsoft knowledge base article about this.