使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

拖把

我有一个简单的iojs http服务器,它与开发计算机上的另一个http后端进行通信。现在我的IP已更改,由于IP错误,后端请求将无法使用。我已经(或者至少是这样认为)进行了错误管理,但是由于某些未处理的异常,服务器在某些情况下崩溃了:

当执行2个后续请求时,第一个请求“挂起”,然后第二个请求使服务器崩溃:

events.js:141
      throw er; // Unhandled 'error' event
            ^
Error: connect EHOSTDOWN 192.168.1.11:80 - Local (192.168.1.10:54125)
    at Object.exports._errnoException (util.js:846:11)
    at exports._exceptionWithHostPort (util.js:869:20)
    at connect (net.js:840:14)
    at lookupAndConnect (net.js:933:5)
    at Socket.connect (net.js:902:5)
    at Agent.exports.connect.exports.createConnection (net.js:61:35)
    at Agent.createSocket (_http_agent.js:177:16)
    at Agent.addRequest (_http_agent.js:147:23)
    at new ClientRequest (_http_client.js:132:16)
    at Object.exports.request (http.js:30:10)

该错误不会触发backRequest.on("error", errFn),也不是中的标准错误function(err, response, body)使用try ... catch无法捕获它。

如何捕获并正常处理此错误?

我已经对net.js / http.js进行了深入研究。手动发出套接字错误时:

backendRequest.on("socket", function(socket) {
    socket.emit("error", "DIE!");
});

它由普通的错误处理程序处理。但是EHOSTDOWN错误不是。原因似乎是套接字错误处理程序仅安装在Socket.connect()之后的下一个刻度上(请参阅https://github.com/joyent/node/blob/master/lib/_http_client.js#L498)。

但是,“ my”错误是在connect()上直接触发的(必须与第一个仍在尝试查找主机的连接有关)。

我可以使用自定义Agent.createConnection优雅地捕获该错误:

var socket = net.createConnection(options);
// install error handler immediately
socket.on("error", function(err) {
    console.log("AHA", err);
});
return socket;

但是,这看起来非常冗长和庞大。那真的是做到这一点的最佳方法吗?该错误似乎并不特殊,并且似乎在核心库中未处理。为什么会这样,为什么套接字错误处理程序仅在nextTick上安装?

您将如何正确捕获该错误?代理商是正确的方法吗?

可以在这里找到一个“完整”的示例来使用:http : //pastebin.com/jaCUPaHX

拖把

正如评论者所指出的:这是一个错误https://github.com/nodejs/io.js/pull/2054

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

来自分类Dev

使用套接字的HTTP请求

来自分类Dev

如何使用Java套接字HTTP / 1.1请求下载图像?

来自分类Dev

python套接字如何使用相同的套接字连接正确重定向http / s请求?

来自分类Dev

在C中使用套接字的HTTP请求

来自分类Dev

使用Node HTTP请求从GitHub API进行套接字挂断错误

来自分类Dev

套接字挂断错误与多个http.get请求

来自分类Dev

Java套接字收到HTTP / 1.1 400错误请求

来自分类Dev

错误的请求套接字python

来自分类Dev

如何在Java中使用相同的套接字连接执行多个HTTP请求?

来自分类Dev

使用null检查Java从套接字读取HTTP请求

来自分类Dev

在HashLink上使用套接字读取HTTP请求

来自分类Dev

在Linux中创建套接字时获取错误代码

来自分类Dev

在Java中创建套接字时出现IOException错误

来自分类Dev

尝试创建套接字时出现分段错误 - 程序集

来自分类Dev

通过TCP套接字发送手工制作的HTTP请求时,为什么会收到HTTP 400错误请求响应?

来自分类Dev

错误:在原始套接字中使用sendto()时,地址错误

来自分类Dev

如何在Java中使用套接字打印/获取传入的HTTP POST请求的有效负载(带有套接字)

来自分类Dev

使用Flutter打印到ESC / POS时如何防止套接字超时错误

来自分类Dev

使用python从维基百科访问数据时如何解决套接字错误

来自分类Dev

如何使用多线程从套接字读取请求

来自分类Dev

使用 socket.io 创建多个套接字时的 ENOBUFS

来自分类Dev

在使用带有for循环的请求时如何忽略HTTP错误?

来自分类Dev

创建ObjectId时如何捕获错误

来自分类Dev

ZeroMQ:重新绑定套接字时使用地址错误

来自分类Dev

ZeroMQ:重新绑定套接字时,地址使用中错误

来自分类Dev

套接字HTTP请求返回无效的GZIP

来自分类Dev

HTTP不套接字Web请求-D

来自分类Dev

套接字还是HTTP POST请求?

Related 相关文章

  1. 1

    使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

  2. 2

    使用套接字的HTTP请求

  3. 3

    如何使用Java套接字HTTP / 1.1请求下载图像?

  4. 4

    python套接字如何使用相同的套接字连接正确重定向http / s请求?

  5. 5

    在C中使用套接字的HTTP请求

  6. 6

    使用Node HTTP请求从GitHub API进行套接字挂断错误

  7. 7

    套接字挂断错误与多个http.get请求

  8. 8

    Java套接字收到HTTP / 1.1 400错误请求

  9. 9

    错误的请求套接字python

  10. 10

    如何在Java中使用相同的套接字连接执行多个HTTP请求?

  11. 11

    使用null检查Java从套接字读取HTTP请求

  12. 12

    在HashLink上使用套接字读取HTTP请求

  13. 13

    在Linux中创建套接字时获取错误代码

  14. 14

    在Java中创建套接字时出现IOException错误

  15. 15

    尝试创建套接字时出现分段错误 - 程序集

  16. 16

    通过TCP套接字发送手工制作的HTTP请求时,为什么会收到HTTP 400错误请求响应?

  17. 17

    错误:在原始套接字中使用sendto()时,地址错误

  18. 18

    如何在Java中使用套接字打印/获取传入的HTTP POST请求的有效负载(带有套接字)

  19. 19

    使用Flutter打印到ESC / POS时如何防止套接字超时错误

  20. 20

    使用python从维基百科访问数据时如何解决套接字错误

  21. 21

    如何使用多线程从套接字读取请求

  22. 22

    使用 socket.io 创建多个套接字时的 ENOBUFS

  23. 23

    在使用带有for循环的请求时如何忽略HTTP错误?

  24. 24

    创建ObjectId时如何捕获错误

  25. 25

    ZeroMQ:重新绑定套接字时使用地址错误

  26. 26

    ZeroMQ:重新绑定套接字时,地址使用中错误

  27. 27

    套接字HTTP请求返回无效的GZIP

  28. 28

    HTTP不套接字Web请求-D

  29. 29

    套接字还是HTTP POST请求?

热门标签

归档