2012-08-27 29 views
5

Ví dụ về hàm socket_t :: send trả về một bool để cho biết nếu thư được gửi thành công nhưng tôi chưa bao giờ thấy bất kỳ mã mẫu nào kiểm tra giá trị trả về này.Bạn có cần phải kiểm tra giá trị trả về của việc gửi trong 0MQ bằng C++ không?

Theo 0MQ C++ API lỗi C được chuyển đổi thành trường hợp ngoại lệ:

Tất cả các lỗi được báo cáo bởi các chức năng thư viện ØMQ C cơ bản sẽ được tự động chuyển đổi sang ngoại lệ bởi các ngôn ngữ C++ ràng buộc. Lớp zmq :: error_t được bắt nguồn từ lớp std :: exception và sử dụng hàm zmq_strerror() để chuyển đổi mã lỗi thành chuỗi có thể đọc được.

Có cần kiểm tra giá trị trả lại của việc gửi không? Có trường hợp nào mà chức năng gửi sẽ trả về false nhưng không ném một ngoại lệ?

Trả lời

3

Từ source code:

inline bool send (message_t &msg_, int flags_ = 0) 
{ 
    int rc = zmq_send (ptr, &msg_, flags_); 
    if (rc == 0) 
     return true; 
    if (rc == -1 && zmq_errno() == EAGAIN) 
     return false; 
    throw error_t(); 
} 

Vì vậy, câu trả lời là có - gửi sẽ trả về false nếu zmq_send đặt lỗi để EAGAIN. Để hiểu khi nào điều đó có thể xảy ra, hãy đọc tài liệu về zmq_socket và zmq_setsockopt.

Bạn nên kiểm tra giá trị trả lại nếu ổ cắm bạn đang sử dụng có thể tăng EAGAIN và bạn muốn xử lý điều kiện này. Bạn có thể xử lý nó, ví dụ, bằng cách xếp hàng tin nhắn và thử lại sau.

Các vấn đề liên quan