C# - an established connection was aborted by the software in your host machine Error

21,114

Setting the correct Content-Length fixed it.

If Content-Length is greater than the actual length, the client-side will continue to wait for the remaining parts of the response. But since the server is already done with sending the response, it will end the process.

Share:
21,114
Ray
Author by

Ray

Updated on August 11, 2020

Comments

  • Ray
    Ray over 3 years

    I am building a Mock Server using TCPListener.

    When I tried to debug my code by running the client, I was able to read the request on the server. But on the client side, an exception is being thrown. Here is the exception I got from the trace:

    System.ServiceModel.CommunicationException: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:05:00'. ---> System.IO.IOException: Unable to read data from the transport connection: An established connection was aborted by the software in your host machine. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine

    Here is the code of I implemented on the server:

    TcpClient client = listener.AcceptTcpClient();
    NetworkStream nwStream = client.GetStream();
    byte[] buffer = new byte[client.ReceiveBufferSize];
    int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize);
    var dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);
    
    byte[] sendBytes = null;
    try
    {
        var output = "POST HTTP/1.1 200 OK\r\n";
        output += "Server: Apache-Coyote/1.1\r\n";
        output += "Content-Type: application/soap+xml\r\n";
        output += "Content-Length: 632\r\n";
        output += "Date: Thu, 06 Aug 2015 02:06:39 GMT\r\n\r\n";
        output +=
            "<S:Envelope xmlns:S=\"http://www.w3.org/2003/05/soap-envelope\"><S:Header></S:Header><S:Body></S:Body></S:Envelope>";
        sendBytes = Encoding.ASCII.GetBytes(output);
        nwStream.Write(sendBytes, 0, sendBytes.Length);
        nwStream.Flush();
    }
    catch (SocketException se)
    {
        throw;
    }
    
    client.Close();
    

    Edit

    I also tried to disable my firewall but the exception still occurs.