nodejs 未捕获的 ECONNABORTED 套接字异常

编程入门 行业动态 更新时间:2024-10-07 00:24:47

nodejs 未捕获的 ECONNABORTED 套接字<a href=https://www.elefans.com/category/jswz/34/1771210.html style=异常"/>

nodejs 未捕获的 ECONNABORTED 套接字异常

我在 nodejs 中制作一个 IMAP 服务器,遇到了一个让我困惑的行为。

基本上,Thunderbird 向其发送命令(注销)(根据 RFC):

服务器必须在(标记的)OK 响应之前发送 BYE 未标记的响应,然后关闭网络连接。

除了 TB 似乎不等待最后一个命令并在 BYE 响应之后立即断开连接,这会引发

write ECONNABORTED
异常。

当然,我在客户端(和服务器)套接字上收听

error
,并且该错误永远不会传到侦听器上。

如果我插入套接字写入回调,错误确实存在并且与引发的相同:

socket.write(data, (err) => {});

与:

process.on("uncaughtException", (err) => { });

我得到异常,如果我不重新抛出它,

socket.on("close", hadError => {})
会被调用,hadError 设置为 true。然而,
socket.on("error")
仍然没有被调用。

我找到了一个分为两部分的解决方法:

  1. 使套接字写入调用成为 Promise,以便我可以在正确的位置捕获错误
  2. 静静地从 uncaughtException 侦听器中删除此异常。

这个变通办法在很多层面上似乎都是错误的:

  • 意外的客户端断开连接似乎是套接字通信中非常标准的场景,因此应该可以在某个地方捕获。我原以为在 socket.write 周围添加一个 try/catch 子句会是一个完美的地方,但经验证明我的理论是错误的
  • 在 uncaughtException 中将由于 ECONNABORTED 引起的所有套接字写入错误静音,而不知道这是否可以接受似乎有点过于宽松

那么我应该如何/在哪里捕获该异常?

答案没有解决我的问题:

  • 在使用 Node JS 写入套接字时尝试捕获错误:我已经在监听 on(error) 并且没有任何反应。此外,在 on('end') 之前会引发异常。
  • Node.js 未捕获的套接字异常 - 套接字已关闭:try/catch 没有捕获任何东西,
    socket.writable
    true
    socket.destroyed
    false
    就在写作之前
  • 使用套接字优雅地处理分叉进程中未捕获的异常:我没有分叉任何东西
回答如下:

这感觉像是 nodejs 中的错误——我在其他情况下也看到过。我采用的一种方法是:

// When your nodejs program initializes...
let onErr = err => {
  if (err?.suppressed) return; // Ignore suppressed errors
  console.log('Uncaught error', err);
  process.exit(0);
};
process.on('uncaughtException', onErr);
process.on('unhandledRejection', onErr);

// ... later on ...
try {
  await doThingThatCausesError(...);
} catch (err) {
  if (unexpected(err)) throw err;
  err.suppressed = true;
  handleExpectedError(err);
}

这种模式让我们可以控制忽略哪些错误,这使得在全局级别忽略它们是安全的。

更多推荐

nodejs 未捕获的 ECONNABORTED 套接字异常

本文发布于:2024-05-13 17:00:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760198.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:异常   nodejs   ECONNABORTED

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!