ECONNRESET: connection reset by peer
Коротко: Інша сторона різко завершила TCP-з’єднання, поки ви надсилали або очікували дані.
Докладніше: Повідомлення: Error: read ECONNRESET (Node.js), Connection reset by peer (Linux), ERR_CONNECTION_RESET (Chrome). На відміну від connection refused (на порту ніхто не слухає) з’єднання спершу було встановлено, а потім жорстко перервано (TCP RST).
Подробиці
Можливі причини
- Сервер падає або перезапускається.
- Міжмережевий екран, проксі або балансувальник навантаження перериває непрацюючі чи довгі з’єднання (тайм-аут простою).
- Сервер закриває keep-alive-з’єднання, які клієнт ще хоче використати повторно.
- Надто великі запити або порушення лімітів.
- Нестабільна мережа (Wi-Fi, VPN, мобільна) або ПЗ безпеки, що блокує трафік TLS.
- Сервер перевантажений і скидає з’єднання (черга заповнена).
- Неправильне налаштування TLS (неправильна версія/шифри).
Рішення
- Перевірте журнали сервера: збій, пам’ять, перезапуски?
- Повторюйте з відстрочкою: окремі скидання в мережі нормальні й мають перехоплюватися клієнтом.
- Узгодьте тайм-аути та налаштування keep-alive клієнта, сервера й посередників (тайм-аут клієнта коротший за тайм-аут сервера).
- Не використовуйте з’єднання повторно нескінченно; за помилки відкривайте нове.
- Перевірте іншу мережу, VPN/проксі/антивірус.
- Зберіть подробиці за допомогою
curl -v,openssl s_clientабоtcpdump. - Перевірте навантаження та ліміти з’єднань (наприклад,
ulimit -n).
Оцінка
Картина «помилка лише іноді» вказує на тайм-аути чи піки навантаження, «завжди» — на конфігурацію або міжмережевий екран. У Node.js: задайте req.on('error', ...) і налаштування Agent для keepAlive, не залишайте помилки необробленими, інакше процес аварійно завершиться.
Див. також: ERR_CONNECTION_REFUSED, ERR_CONNECTION_TIMED_OUT, HTTP keep-alive