Chapter 2 - Sockets and Patterns【选译,哈哈】 Part 4 Handling Errors and ETERM

Handling Errors and ETERM

ZeroMQ的错误处理理念是快速失败和弹性的结合。我们认为,流程应该尽可能容易受到内部错误的攻击,并尽可能健壮地抵御外部攻击和错误。打个比方,如果一个活细胞检测到一个内部错误,它就会自我毁灭,但它会用一切可能的手段抵抗来自外部的攻击。

当ZeroMQ检测到外部错误时,它会向调用代码返回一个错误。在一些罕见的情况下,如果没有明显的从错误中恢复的策略,它会安静地丢弃消息。

有一些简单的规则,从POSIX约定开始:

Methods that create objects return NULL if they fail.

Methods that process data may return the number of bytes processed, or -1 on an error or failure.

Other methods return 0 on success and -1 on an error or failure.

The error code is provided in errno or zmq_errno().

A descriptive error text for logging is provided by zmq_strerror(). zmq_strerror()提供了用于日志记录的描述性错误文本。

 

有两个主要的异常情况,你应该作为非致命的处理:

当代码接收到带有ZMQ_DONTWAIT选项的消息且没有等待数据时,ZeroMQ将返回-1并将errno设置为EAGAIN。

当一个线程调用zmq_ctx_destroy(),而其他线程仍在执行阻塞工作时,zmq_ctx_destroy()调用关闭上下文,所有阻塞调用以-1退出,errno设置为ETERM。

上一篇:摄像头jpeg拍照通用控制程序


下一篇:使用Photoshop给美女人像添加怀旧漏光效果