Как избежать получения ошибки 10053 (WSAECONNABORTED), если операция HttpGet в Android длится слишком долго?

У меня есть приложение Android, связывающееся с приложением веб-службы Delphi 2006 с использованием Indy 10 TIdHttpServer (поставляется с Delphi 2006). Приложение Delphi генерирует большой XML-файл и обслуживает его. Генерация XML может длиться более 5 минут.

Если продолжительностьGenerateXml() более 5 минут (*), я обнаружил ошибку 10053 вTIdHTTPResponseInfo.WriteContent если работает в Delphi IDE:

Socket Error # 10053 Software caused connection abort.

Однако на стороне андроида ничего не обнаружено иHttpGetЗвонок длится вечно.

Мои вопросы:

1.) Почему я получаю ошибку 10053 и как ее избежать? Кажется, что Android истекает время соединения, ноhttp.socket.timeout установлен на бесконечность.

а также

2.) Что я могу сделать, чтобы обнаружить такую ошибку на стороне клиента (кроме установки таймаута, который должен быть слишком большим, чтобы быть полезным)? Могу ли я сделать что-то в TIdHttpServer.OnException?

Вот мой код Android - функция загрузки, которая запускается внутри 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();  
}   

Delphi реализация 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;

Редактировать: (*) Я провел дополнительное тестирование и обнаружил ошибку даже в тех случаях, когда весь процесс длился менее 2 минут.

Ответы на вопрос(1)

Ваш ответ на вопрос