2012-08-27 13 views
5

Gli esempi di funzioni socket_t :: send restituiscono un valore bool per indicare se il messaggio è stato inviato correttamente ma non ho mai visto alcun codice di esempio che controlli questo valore di ritorno.È necessario controllare il valore di ritorno di send in 0MQ con C++?

Secondo gli errori 0MQ C++ API C vengono convertiti in eccezioni:

Tutti gli errori riportati dai sottostanti funzioni della libreria QOV C vengono automaticamente convertiti eccezioni da parte del linguaggio C++ vincolante. La classe zmq :: error_t è derivata dalla classe std :: exception e utilizza la funzione zmq_strerror() per convertire il codice di errore in stringa leggibile dall'uomo.

E 'necessario controllare il valore di ritorno di inviare? C'è qualche caso in cui la funzione di invio restituisce false ma non genera un'eccezione?

risposta

3

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

Quindi la risposta è lì - inviare restituirà false se zmq_send imposta l'errore EAGAIN. Per capire quando ciò potrebbe accadere, leggi la documentazione di zmq_socket e zmq_setsockopt.

È necessario verificare il valore restituito se il socket in uso potrebbe aumentare EAGAIN e si desidera gestire questa condizione. Puoi gestirlo, ad esempio, accodando il messaggio e riprovando più tardi.

Problemi correlati