[Bug]: EAI_AGAIN Error when DNS resolution partially fails #3132

Open
opened 2026-04-25 00:13:49 +02:00 by adam · 3 comments
Owner

Originally created by @PassionateBytes on GitHub (Dec 2, 2025).

What happened?

While trying to access certain podcast feeds or download certain podcast episodes, I ran into this error:

Full Error Message...

[2025-12-02 19:49:57.542] ERROR: [podcastUtils] getPodcastFeed Error AxiosError: getaddrinfo EAI_AGAIN feeds.lagedernation.org
    at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26) {
  hostname: 'feeds.lagedernation.org',
  syscall: 'getaddrinfo',
  code: 'EAI_AGAIN',
  errno: -3001,
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [Function: httpAdapter],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 30000,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function] },
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8',
      'Accept-Encoding': 'gzip, compress, deflate',
      'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)'
    },
    url: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml',
    method: 'get',
    responseType: 'arraybuffer',
    httpAgent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype] {},
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 0,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      createConnection: [Function (anonymous)],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(active)]: true
    },
    httpsAgent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      createConnection: [Function (anonymous)],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(active)]: true
    },
    data: undefined
  },
  request: <ref *1> Writable {
    _events: {
      close: undefined,
      error: [Function: handleRequestError],
      prefinish: undefined,
      finish: undefined,
      drain: undefined,
      response: [Function: handleResponse],
      socket: [Array],
      timeout: undefined,
      abort: undefined
    },
    _writableState: WritableState {
      highWaterMark: 16384,
      length: 0,
      corked: 0,
      onwrite: [Function: bound onwrite],
      writelen: 0,
      bufferedIndex: 0,
      pendingcb: 0,
      [Symbol(kState)]: 17580812,
      [Symbol(kBufferedValue)]: null
    },
    _maxListeners: undefined,
    _options: {
      maxRedirects: 21,
      maxBodyLength: 10485760,
      protocol: 'https:',
      path: '/feeds/ldn-mp3.xml',
      method: 'GET',
      headers: [Object],
      agent: [Agent],
      agents: [Object],
      auth: undefined,
      hostname: 'feeds.lagedernation.org',
      port: null,
      nativeProtocols: [Object],
      pathname: '/feeds/ldn-mp3.xml'
    },
    _ended: true,
    _ending: true,
    _redirectCount: 0,
    _redirects: [],
    _requestBodyLength: 0,
    _requestBodyBuffers: [],
    _eventsCount: 3,
    _onNativeResponse: [Function (anonymous)],
    _currentRequest: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /feeds/ldn-mp3.xml HTTP/1.1\r\n' +
        'Accept: application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8\r\n' +
        'Accept-Encoding: gzip, compress, deflate\r\n' +
        'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' +
        'Host: feeds.lagedernation.org\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/feeds/ldn-mp3.xml',
      _ended: false,
      res: null,
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'feeds.lagedernation.org',
      protocol: 'https:',
      _redirectable: [Circular *1],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    _currentUrl: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml',
    _timeout: null,
    [Symbol(shapeMode)]: true,
    [Symbol(kCapture)]: false
  }
}

Through some troubleshooting, I realized that this occurs specifically in cases where the ABS server partially fails to resolve a hostname. - i.e. it may resolve a A record (IPv4), but resolving AAAA records (IPv6) leads to a SERVFAIL.

Going with the example above, I tried to manually check the hostname and came across the aforementioned SERVFAIL error, while simultaneously still successfully receiving at least a IPv4 address. I was able to reproduce the following behavior on my local machine, my home lab server, as well as two different remote cloud servers in different countries (and entirely separate networks):

$ nslookup feeds.lagedernation.org
Server: 127.0.0.53
Address: 127.0.0.53#53

Non-authoritative answer:
Name: cdn.lagedernation.org
Address: 139.162.176.53  # <-- successfully resolved A record
;; Got SERVFAIL reply from 127.0.0.53
** server can't find cdn.lagedernation.org: SERVFAIL  # <-- DNS server rejects AAAA query

I ran into the same issue with the hostnam cdn.lagedernation.org.

What did you expect to happen?

Axios (and Node's underlying name resolution) should not fail a web request entirely, when it receives at least a partial domain name resolution. It should do so consistently, regardless of the runtime environment.

Steps to reproduce the issue

  1. Run the audiobook docker image (in my case via a deployment on a K3S cluster on Fedora Server)
  2. Add the podcast Lage der Nation with this feed: https://feeds.lagedernation.org/feeds/ldn-mp3.xml
  3. Observe feed loading issues, and episode loading issues.

Audiobookshelf version

v2.30.0

How are you running audiobookshelf?

Other (list in "Additional Notes" box)

What OS is your Audiobookshelf server hosted from?

Linux

If the issue is being seen in the UI, what browsers are you seeing the problem on?

None

Logs

[2025-12-02 19:49:57.542] ERROR: [podcastUtils] getPodcastFeed Error AxiosError: getaddrinfo EAI_AGAIN feeds.lagedernation.org
    at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26) {
  hostname: 'feeds.lagedernation.org',
  syscall: 'getaddrinfo',
  code: 'EAI_AGAIN',
  errno: -3001,
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [Function: httpAdapter],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 30000,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function] },
    validateStatus: [Function: validateStatus],
    headers: {
      Accept: 'application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8',
      'Accept-Encoding': 'gzip, compress, deflate',
      'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)'
    },
    url: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml',
    method: 'get',
    responseType: 'arraybuffer',
    httpAgent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype] {},
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 0,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      createConnection: [Function (anonymous)],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(active)]: true
    },
    httpsAgent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      defaultPort: 443,
      protocol: 'https:',
      options: [Object: null prototype],
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: false,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      createConnection: [Function (anonymous)],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(active)]: true
    },
    data: undefined
  },
  request: <ref *1> Writable {
    _events: {
      close: undefined,
      error: [Function: handleRequestError],
      prefinish: undefined,
      finish: undefined,
      drain: undefined,
      response: [Function: handleResponse],
      socket: [Array],
      timeout: undefined,
      abort: undefined
    },
    _writableState: WritableState {
      highWaterMark: 16384,
      length: 0,
      corked: 0,
      onwrite: [Function: bound onwrite],
      writelen: 0,
      bufferedIndex: 0,
      pendingcb: 0,
      [Symbol(kState)]: 17580812,
      [Symbol(kBufferedValue)]: null
    },
    _maxListeners: undefined,
    _options: {
      maxRedirects: 21,
      maxBodyLength: 10485760,
      protocol: 'https:',
      path: '/feeds/ldn-mp3.xml',
      method: 'GET',
      headers: [Object],
      agent: [Agent],
      agents: [Object],
      auth: undefined,
      hostname: 'feeds.lagedernation.org',
      port: null,
      nativeProtocols: [Object],
      pathname: '/feeds/ldn-mp3.xml'
    },
    _ended: true,
    _ending: true,
    _redirectCount: 0,
    _redirects: [],
    _requestBodyLength: 0,
    _requestBodyBuffers: [],
    _eventsCount: 3,
    _onNativeResponse: [Function (anonymous)],
    _currentRequest: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /feeds/ldn-mp3.xml HTTP/1.1\r\n' +
        'Accept: application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8\r\n' +
        'Accept-Encoding: gzip, compress, deflate\r\n' +
        'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' +
        'Host: feeds.lagedernation.org\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/feeds/ldn-mp3.xml',
      _ended: false,
      res: null,
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'feeds.lagedernation.org',
      protocol: 'https:',
      _redirectable: [Circular *1],
      [Symbol(shapeMode)]: false,
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    _currentUrl: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml',
    _timeout: null,
    [Symbol(shapeMode)]: true,
    [Symbol(kCapture)]: false
  }
}

Additional Notes

Running in K3S (Kubernetes).

I suspect that the issue may be specific to certain runtime environments, as Node's underlying name resolution may depend on kernel level implementations. - For example, I was able to reproduce the exact ABS error on my homelab server only. I could not reproduce this behavior on my dev machine. - Even though nslookup returns the same partial result (A record OK, AAAA record SERVFAIL) on both my developer machine, as well as inside the ABS container on my homelab.

Originally created by @PassionateBytes on GitHub (Dec 2, 2025). ### What happened? While trying to access certain podcast feeds or download certain podcast episodes, I ran into this error: <details><summary>Full Error Message...</summary> <p> ``` [2025-12-02 19:49:57.542] ERROR: [podcastUtils] getPodcastFeed Error AxiosError: getaddrinfo EAI_AGAIN feeds.lagedernation.org at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26) { hostname: 'feeds.lagedernation.org', syscall: 'getaddrinfo', code: 'EAI_AGAIN', errno: -3001, config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [Function: httpAdapter], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 30000, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: { FormData: [Function] }, validateStatus: [Function: validateStatus], headers: { Accept: 'application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8', 'Accept-Encoding': 'gzip, compress, deflate', 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)' }, url: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml', method: 'get', responseType: 'arraybuffer', httpAgent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype] {}, freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: false, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 0, maxCachedSessions: 100, _sessionCache: [Object], createConnection: [Function (anonymous)], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(active)]: true }, httpsAgent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype], freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: false, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, maxCachedSessions: 100, _sessionCache: [Object], createConnection: [Function (anonymous)], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(active)]: true }, data: undefined }, request: <ref *1> Writable { _events: { close: undefined, error: [Function: handleRequestError], prefinish: undefined, finish: undefined, drain: undefined, response: [Function: handleResponse], socket: [Array], timeout: undefined, abort: undefined }, _writableState: WritableState { highWaterMark: 16384, length: 0, corked: 0, onwrite: [Function: bound onwrite], writelen: 0, bufferedIndex: 0, pendingcb: 0, [Symbol(kState)]: 17580812, [Symbol(kBufferedValue)]: null }, _maxListeners: undefined, _options: { maxRedirects: 21, maxBodyLength: 10485760, protocol: 'https:', path: '/feeds/ldn-mp3.xml', method: 'GET', headers: [Object], agent: [Agent], agents: [Object], auth: undefined, hostname: 'feeds.lagedernation.org', port: null, nativeProtocols: [Object], pathname: '/feeds/ldn-mp3.xml' }, _ended: true, _ending: true, _redirectCount: 0, _redirects: [], _requestBodyLength: 0, _requestBodyBuffers: [], _eventsCount: 3, _onNativeResponse: [Function (anonymous)], _currentRequest: ClientRequest { _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [TLSSocket], _header: 'GET /feeds/ldn-mp3.xml HTTP/1.1\r\n' + 'Accept: application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8\r\n' + 'Accept-Encoding: gzip, compress, deflate\r\n' + 'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' + 'Host: feeds.lagedernation.org\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/feeds/ldn-mp3.xml', _ended: false, res: null, aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'feeds.lagedernation.org', protocol: 'https:', _redirectable: [Circular *1], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype], [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, _currentUrl: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml', _timeout: null, [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false } } ``` </p> </details> Through some troubleshooting, I realized that this occurs specifically in cases where the ABS server **partially** fails to resolve a hostname. - i.e. it may resolve a `A` record (IPv4), but resolving `AAAA` records (IPv6) leads to a `SERVFAIL`. Going with the example above, I tried to manually check the hostname and came across the aforementioned `SERVFAIL` error, while simultaneously still successfully receiving at least a IPv4 address. I was able to reproduce the following behavior on my local machine, my home lab server, as well as two different remote cloud servers in different countries (and entirely separate networks): ```bash $ nslookup feeds.lagedernation.org Server: 127.0.0.53 Address: 127.0.0.53#53 Non-authoritative answer: Name: cdn.lagedernation.org Address: 139.162.176.53 # <-- successfully resolved A record ;; Got SERVFAIL reply from 127.0.0.53 ** server can't find cdn.lagedernation.org: SERVFAIL # <-- DNS server rejects AAAA query ``` I ran into the same issue with the hostnam `cdn.lagedernation.org`. ### What did you expect to happen? Axios (and Node's underlying name resolution) should not fail a web request entirely, when it receives at least a partial domain name resolution. It should do so consistently, regardless of the runtime environment. ### Steps to reproduce the issue 1. Run the audiobook docker image (in my case via a deployment on a K3S cluster on Fedora Server) 2. Add the podcast `Lage der Nation` with this feed: `https://feeds.lagedernation.org/feeds/ldn-mp3.xml` 3. Observe feed loading issues, and episode loading issues. ### Audiobookshelf version v2.30.0 ### How are you running audiobookshelf? Other (list in "Additional Notes" box) ### What OS is your Audiobookshelf server hosted from? Linux ### If the issue is being seen in the UI, what browsers are you seeing the problem on? None ### Logs ```shell [2025-12-02 19:49:57.542] ERROR: [podcastUtils] getPodcastFeed Error AxiosError: getaddrinfo EAI_AGAIN feeds.lagedernation.org at GetAddrInfoReqWrap.onlookupall [as oncomplete] (node:dns:122:26) { hostname: 'feeds.lagedernation.org', syscall: 'getaddrinfo', code: 'EAI_AGAIN', errno: -3001, config: { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [Function: httpAdapter], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 30000, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, env: { FormData: [Function] }, validateStatus: [Function: validateStatus], headers: { Accept: 'application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8', 'Accept-Encoding': 'gzip, compress, deflate', 'User-Agent': 'audiobookshelf (+https://audiobookshelf.org; like iTMS)' }, url: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml', method: 'get', responseType: 'arraybuffer', httpAgent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype] {}, freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: false, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 0, maxCachedSessions: 100, _sessionCache: [Object], createConnection: [Function (anonymous)], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(active)]: true }, httpsAgent: Agent { _events: [Object: null prototype], _eventsCount: 2, _maxListeners: undefined, defaultPort: 443, protocol: 'https:', options: [Object: null prototype], requests: [Object: null prototype] {}, sockets: [Object: null prototype], freeSockets: [Object: null prototype] {}, keepAliveMsecs: 1000, keepAlive: false, maxSockets: Infinity, maxFreeSockets: 256, scheduling: 'lifo', maxTotalSockets: Infinity, totalSocketCount: 1, maxCachedSessions: 100, _sessionCache: [Object], createConnection: [Function (anonymous)], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(active)]: true }, data: undefined }, request: <ref *1> Writable { _events: { close: undefined, error: [Function: handleRequestError], prefinish: undefined, finish: undefined, drain: undefined, response: [Function: handleResponse], socket: [Array], timeout: undefined, abort: undefined }, _writableState: WritableState { highWaterMark: 16384, length: 0, corked: 0, onwrite: [Function: bound onwrite], writelen: 0, bufferedIndex: 0, pendingcb: 0, [Symbol(kState)]: 17580812, [Symbol(kBufferedValue)]: null }, _maxListeners: undefined, _options: { maxRedirects: 21, maxBodyLength: 10485760, protocol: 'https:', path: '/feeds/ldn-mp3.xml', method: 'GET', headers: [Object], agent: [Agent], agents: [Object], auth: undefined, hostname: 'feeds.lagedernation.org', port: null, nativeProtocols: [Object], pathname: '/feeds/ldn-mp3.xml' }, _ended: true, _ending: true, _redirectCount: 0, _redirects: [], _requestBodyLength: 0, _requestBodyBuffers: [], _eventsCount: 3, _onNativeResponse: [Function (anonymous)], _currentRequest: ClientRequest { _events: [Object: null prototype], _eventsCount: 7, _maxListeners: undefined, outputData: [], outputSize: 0, writable: true, destroyed: false, _last: true, chunkedEncoding: false, shouldKeepAlive: false, maxRequestsOnConnectionReached: false, _defaultKeepAlive: true, useChunkedEncodingByDefault: false, sendDate: false, _removedConnection: false, _removedContLen: false, _removedTE: false, strictContentLength: false, _contentLength: 0, _hasBody: true, _trailer: '', finished: true, _headerSent: true, _closed: false, socket: [TLSSocket], _header: 'GET /feeds/ldn-mp3.xml HTTP/1.1\r\n' + 'Accept: application/rss+xml, application/xhtml+xml, application/xml, */*;q=0.8\r\n' + 'Accept-Encoding: gzip, compress, deflate\r\n' + 'User-Agent: audiobookshelf (+https://audiobookshelf.org; like iTMS)\r\n' + 'Host: feeds.lagedernation.org\r\n' + 'Connection: close\r\n' + '\r\n', _keepAliveTimeout: 0, _onPendingData: [Function: nop], agent: [Agent], socketPath: undefined, method: 'GET', maxHeaderSize: undefined, insecureHTTPParser: undefined, joinDuplicateHeaders: undefined, path: '/feeds/ldn-mp3.xml', _ended: false, res: null, aborted: false, timeoutCb: null, upgradeOrConnect: false, parser: null, maxHeadersCount: null, reusedSocket: false, host: 'feeds.lagedernation.org', protocol: 'https:', _redirectable: [Circular *1], [Symbol(shapeMode)]: false, [Symbol(kCapture)]: false, [Symbol(kBytesWritten)]: 0, [Symbol(kNeedDrain)]: false, [Symbol(corked)]: 0, [Symbol(kOutHeaders)]: [Object: null prototype], [Symbol(errored)]: null, [Symbol(kHighWaterMark)]: 16384, [Symbol(kRejectNonStandardBodyWrites)]: false, [Symbol(kUniqueHeaders)]: null }, _currentUrl: 'https://feeds.lagedernation.org/feeds/ldn-mp3.xml', _timeout: null, [Symbol(shapeMode)]: true, [Symbol(kCapture)]: false } } ``` ### Additional Notes Running in K3S (Kubernetes). I suspect that the issue may be specific to certain runtime environments, as Node's underlying name resolution may depend on kernel level implementations. - For example, I was able to reproduce the exact ABS error on my homelab server only. I could not reproduce this behavior on my dev machine. - Even though `nslookup` returns the same partial result (A record OK, AAAA record SERVFAIL) on both my developer machine, as well as inside the ABS container on my homelab.
adam added the bug label 2026-04-25 00:13:49 +02:00
Author
Owner

@Vito0912 commented on GitHub (Dec 2, 2025):

To our knowledge this is an issue with how Lagedernation handles their DNS. Please search before opening an issue. There are already plenty for this, just searching the domain.

See here: https://talk.lagedernation.org/t/lage-cdn-dns-issues/27017/3 . As you can see. Fixing the cause is probably better than implementing something just used for a minority of podcasts (afaik it's only lagedernation)

Duplicate of https://github.com/advplyr/audiobookshelf/issues/3967

@Vito0912 commented on GitHub (Dec 2, 2025): To our knowledge this is an issue with how Lagedernation handles their DNS. Please search before opening an issue. There are already plenty for this, just searching the domain. See here: https://talk.lagedernation.org/t/lage-cdn-dns-issues/27017/3 . As you can see. Fixing the cause is probably better than implementing something just used for a minority of podcasts (afaik it's only lagedernation) Duplicate of https://github.com/advplyr/audiobookshelf/issues/3967
Author
Owner

@PassionateBytes commented on GitHub (Dec 2, 2025):

Hi @Vito0912!
Indeed, this is an issue with that podcast's DNS server. However, ABS should still be able to work with this podcast feed no matter what, because the DNS resolution partially succeeds - which is all that's required.

We do get a IPv4 address, but the DNS server rejects any requests for IPv6 - Doesn't mean we can't still run with the IPv4 address.

All that is to say, I filed this issue here specifically as reference for my PR which I have submitted here: #4885

My PR solves this issue, by gracefully allowing partial DNS resolution failures. It is implemented behind a user-configurable environment variable EXP_DNS_RESOLUTION, allowing users to turn on this experimental feature when needed.
This would finally solve the problem for all "Lage der Nation" fans, and those of other podcasts with similar issues.

@PassionateBytes commented on GitHub (Dec 2, 2025): Hi @Vito0912! Indeed, this is an issue with that podcast's DNS server. However, ABS should still be able to work with this podcast feed no matter what, because the DNS resolution **partially** succeeds - which is all that's required. We do get a IPv4 address, but the DNS server rejects any requests for IPv6 - Doesn't mean we can't still run with the IPv4 address. All that is to say, I filed this issue here specifically as reference for my PR which I have submitted here: #4885 My PR solves this issue, by gracefully allowing partial DNS resolution failures. It is implemented behind a user-configurable environment variable `EXP_DNS_RESOLUTION`, allowing users to turn on this experimental feature when needed. This would finally solve the problem for all "Lage der Nation" fans, and those of other podcasts with similar issues.
Author
Owner

@Vito0912 commented on GitHub (Dec 2, 2025):

Sorry, I linked the wrong issue:

https://github.com/advplyr/audiobookshelf/issues/3346

Especially: https://github.com/advplyr/audiobookshelf/issues/3346#issuecomment-2423771489

This is neither node, nor axios, nor abs. But that's another topic, I just wanted to state, that this is, yet again, another duplicate issue

@Vito0912 commented on GitHub (Dec 2, 2025): Sorry, I linked the wrong issue: https://github.com/advplyr/audiobookshelf/issues/3346 Especially: https://github.com/advplyr/audiobookshelf/issues/3346#issuecomment-2423771489 This is neither node, nor axios, nor abs. But that's another topic, I just wanted to state, that this is, yet again, another duplicate issue
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#3132