2012-08-27 12 views
5

Los ejemplos de la función socket_t :: send devuelven un bool para indicar si el mensaje se envió con éxito pero nunca he visto ningún código de muestra que compruebe este valor de retorno.¿Es necesario verificar el valor de retorno de enviar en 0MQ con C++?

Según los 0MQ C++ API errores C se convierten en excepciones:

Todos los errores reportados por los subyacentes funciones de biblioteca OMQ C se convierten automáticamente a las excepciones por el lenguaje C++ de unión. La clase zmq :: error_t se deriva de la clase std :: exception y utiliza la función zmq_strerror() para convertir el código de error en una cadena legible por humanos.

¿Es necesario comprobar el valor de retorno de enviar? ¿Hay algún caso en el que la función de envío devuelva falso pero no arroje una excepción?

Respuesta

3

Desde el 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(); 
} 

Así que la respuesta es no - enviar devolverá false si zmq_send establece el error de EAGAIN. Para comprender cuándo podría ocurrir eso, lea la documentación de zmq_socket y zmq_setsockopt.

Debe verificar el valor de retorno si el socket que está utilizando puede generar EAGAIN, y desea controlar esta condición. Puede manejarlo, por ejemplo, al poner en cola el mensaje e intentarlo más tarde.

Cuestiones relacionadas