send method

Future<Response?> send(
  1. Request request, {
  2. Duration? timeout,
  3. bool returnsBinary = false,
})

Implementation

Future<http.Response?> send(
  http.Request request, {
  Duration? timeout,
  bool returnsBinary = false,
}) async {
  try {
    // Setze Verbindungstimeouts für die Verbindung

    // Verwende einen längeren Standard-Timeout, wenn keiner angegeben ist
    timeout ??= Duration(minutes: 2);

    final req = _client.send(request);
    final res = await req.timeout(timeout, onTimeout: () {
      debugPrint('HTTP Request Timeout nach ${timeout?.inSeconds} Sekunden');
      throw TimeoutException('HTTP Request Timeout', timeout);
    });

    try {
      final ret = await http.Response.fromStream(res);
      return ret;
    } catch (e) {
      debugPrint('Fehler beim Verarbeiten des Response-Streams: $e');
      // Versuche es noch einmal mit einem neuen Request, wenn der Stream beschädigt ist
      if (e is IOException) {
        debugPrint(
            'IO-Fehler beim Lesen des Streams, möglicherweise Netzwerkunterbrechung');
      }
      rethrow;
    }
  } on SocketException catch (e) {
    debugPrint('Socket-Fehler beim Senden des Requests: ${e.message}');
    // Spezielle Behandlung für bestimmte Socket-Fehler
    if (e.message.contains('Software caused connection abort') ||
        e.message.contains('Write failed')) {
      debugPrint(
          'App wahrscheinlich im Hintergrund, Socket wurde vom System geschlossen');
    }
    rethrow;
  } catch (e) {
    debugPrint('Fehler beim Senden des Requests: $e');
    rethrow;
  }
}