1. struct UVError { 2. int value; 3. const char* name; 4. const char* message; 5. }; 6. 7. static const struct UVError uv_errors_map[] = { 8. #define V(name, message) {UV_##name, #name, message}, 9. UV_ERRNO_MAP(V) 10. #undef V 11. };
UV_ERRNO_MAP宏展开后如下
1. {UV_E2BIG, "E2BIG", "argument list too long"}, 2. {UV_EACCES, "EACCES", "permission denied"}, 3. {UV_EADDRINUSE, "EADDRINUSE", "address already in use"}, 4. ……
所以导出到JS层的功效如下
1. { 2. // 键是一个数字,由Libuv界说,其实是封装了操纵系统的界说 3. UV_ECONNREFUSED: ["ECONNREFUSED", "connection refused"], 4. UV_ECONNRESET: ["ECONNRESET", "connection reset by peer"] 5. ... 6. }
Node.js最后会组装这些信息返回给挪用方。这就是我们输出的错误信息。那么为什么会是ECONNREFUSED呢?我们看一下操纵系统对付该错误码的逻辑。
1. static void tcp_reset(struct sock *sk) 2. { 3. switch (sk->sk_state) { 4. case TCP_SYN_SENT: 5. sk->sk_err = ECONNREFUSED; 6. break; 7. // ... 8. } 9. 10. }
当操纵系统收到一个发给该socket的rst包的时候会执行tcp_reset,我们看到当socket处于发送syn包期待ack的时候,假如收到一个fin包,则会配置错误码为ECONNREFUSED。我们输出的正是这个错误码。
总结
到此这篇关于nodejs的错误处理惩罚进程记录的文章就先容到这了,更多相关nodejs错误处理惩罚内容请搜索剧本之家以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持剧本之家!
您大概感乐趣的文章: