code: public static boolean isTransientError(Throwable throwable) {
          if (throwable instanceof CouchbaseLiteException) {
              CouchbaseLiteException e = (CouchbaseLiteException) throwable;
              return isTransientError(e.getCBLStatus().getCode());
          } else if (throwable instanceof RemoteRequestResponseException) {
              RemoteRequestResponseException e = (RemoteRequestResponseException) throwable;
              return isTransientError(e.getCode());
          } else if (throwable instanceof java.net.SocketTimeoutException)
              // connection and socket timeouts => transient error
              return true;
          else if (throwable instanceof java.net.ConnectException)
              return true;
          else if (throwable instanceof java.net.SocketException)
              return true;
          else if (throwable instanceof IOException)
              // NOTE: Exception is thrown from HttpClient.execute() or InputStream.read()
              //       As InputStream.read() thrown IOException, So IOException is considered
              //       temporary issue.
              return true;
          else
              return false;
      }
docs: in CBLMisc.m
  BOOL CBLMayBeTransientError( NSError* error )