¿Cómo evitar recibir un error 10053 (WSAECONNABORTED) si la operación de HttpGet en Android dura demasiado?

Tengo una aplicación de Android que se comunica con una aplicación de servicio web Delphi 2006 utilizando Indy 10 TIdHttpServer (que viene con Delphi 2006). La aplicación Delphi genera un gran archivo XML y sirve esto. La generación XML puede durar más de 5 minutos.

Si la duración deGenerateXml() es más de unos 5 minutos (*), detecto un error 10053 enTIdHTTPResponseInfo.WriteContent Si se ejecuta en el IDE de Delphi:

Socket Error # 10053 Software caused connection abort.

Sin embargo, en el lado de Android no se detecta nada y elHttpGet-Llama dura para siempre.

Mis preguntas son:

1.) ¿Por qué recibo el error 10053 y cómo puedo evitarlo? Parece que Android agota la conexión, perohttp.socket.timeout se establece en infinito.

y

2.) ¿Qué puedo hacer para detectar dicho error en el lado del cliente (aparte de establecer el tiempo de espera, que tendría que ser demasiado grande para ser útil)? ¿Puedo hacer algo en TIdHttpServer.OnException?

Aquí está mi código. Android: función de descarga, que se ejecuta dentro de una AsyncTask:

protected static HttpEntity downloadEntity(String url) throws IOException {
    HttpClient client = new DefaultHttpClient();  

    //Check because of Error 10053: but timeout is null -> infinite
    Log.d("TAG", "http.socket.timeout: " + client.getParams().getParameter("http.socket.timeout"));

    HttpGet get = new HttpGet(url);
    HttpResponse response;
    try {
        //in case of Error 10053 the following call seems to last forever (in PlainSocketImpl.read)
        response = client.execute(get);
    } catch (ClientProtocolException e) {
        //...
    }

    //...

    return response.getEntity();  
}   

Implementación Delphi de TIdHttpServer.OnCommandGet:

procedure ServeXmlDoc(XmlDoc: IXMLDocument; ResponseInfo: TIdHTTPResponseInfo);
var
    TempStream: TMemoryStream;
begin
    ResponseInfo.ContentType := 'text/xml';
    TempStream := TMemoryStream.Create;
    XMLDoc.SaveToStream(TempStream);
    ResponseInfo.FreeContentStream := True; 
    ResponseInfo.ContentStream := TempStream;
end;

procedure TMyService.HTTPServerCommandGet(AContext: TIdContext; RequestInfo: TIdHTTPRequestInfo;
  ResponseInfo: TIdHTTPResponseInfo);
begin
    Coinitialize(nil); 
    try
        //...
        ServeXmlDoc(GenerateXml(), ResponseInfo);
    finally
        CoUninitialize;
    end;
end;

Editar: (*) He realizado más pruebas y he experimentado el error incluso en los casos en que todo el proceso duró menos de 2 minutos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta