2011-08-17 20 views
9

Recientemente comencé a trabajar con Boost Asio. Me di cuenta de que el receive method of a TCP socket acepta un message_flags como parámetro. Sin embargo, la documentación que encontré para message_flags solo dice que es un número entero sin especificar los valores válidos. ¿Cuáles son los valores que se pueden asignar a un message_flags y qué significan?Boost Asio message_flags

Respuesta

11

Busqué por un tiempo y finalmente traté de buscar en el código fuente de Boost. He encontrado esto en socket_base.hpp:

/// Bitmask type for flags that can be passed to send and receive operations. 
    typedef int message_flags; 

#if defined(GENERATING_DOCUMENTATION) 
    /// Peek at incoming data without removing it from the input queue. 
    static const int message_peek = implementation_defined; 

    /// Process out-of-band data. 
    static const int message_out_of_band = implementation_defined; 

    /// Specify that the data should not be subject to routing. 
    static const int message_do_not_route = implementation_defined; 
#else 
    BOOST_STATIC_CONSTANT(int, 
     message_peek = boost::asio::detail::message_peek); 
    BOOST_STATIC_CONSTANT(int, 
     message_out_of_band = boost::asio::detail::message_out_of_band); 
    BOOST_STATIC_CONSTANT(int, 
     message_do_not_route = boost::asio::detail::message_do_not_route); 
#endif 

base a esto, se ve como message_peek, message_out_of_band y message_do_not_route son los valores posibles. Voy a intentar esto y ver si puedo hacer que funcionen.

0

Me encontré con el mismo problema y mi solución fue utilizar la sobrecarga que no toma el parámetro message_flags (http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/basic_datagram_socket/send_to/overload1.html).

Lo malo es que si se quiere informar de errores de código de error que no puede usarlo (sobrecarga utiliza una excepción, y no toma ec param)

+0

¿Qué le parece pasar 0 como bandera? ¿No te dará el comportamiento deseado? – russoue

+0

Usé 0 y me pareció bien –

0

Este parámetro se envía a la llamada al sistema. Por ejemplo, en Windows, se reenvía directamente a WSASend. El significado de param debe verificarse en los documentos del sistema operativo: WSASend para Windows, de lo contrario recvmsg.

Cuestiones relacionadas