Повысьте Asio message_flags - PullRequest
       19

Повысьте Asio message_flags

11 голосов
/ 17 августа 2011

Я недавно начал работать с Boost Asio. Я заметил, что метод приема TCP-сокета принимает message_flags в качестве параметра. Тем не менее, документация, которую я нашел для message_flags, говорит только, что это целое число без указания допустимых значений. Какие значения могут быть присвоены message_flags и что они означают?

Ответы [ 3 ]

12 голосов
/ 18 августа 2011

Я некоторое время искал и, наконец, попытался заглянуть в исходный код Boost.Я нашел это в 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

Исходя из этого, выглядит, что message_peek, message_out_of_band и message_do_not_route являются возможными значениями.Я собираюсь дать им попробовать и посмотреть, смогу ли я заставить их работать.

1 голос
/ 07 октября 2016

Этот параметр перенаправляется на системный вызов. Например, в Windows он направляется непосредственно в WSASend. Значение параметра должно быть проверено в документации по ОС: WSASend для Windows, в противном случае recvmsg .

0 голосов
/ 05 февраля 2014

Я столкнулся с той же проблемой, и я решил использовать перегрузку, которая не принимает параметр message_flags (http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/basic_datagram_socket/send_to/overload1.html).

Недостатком является то, что если вы хотите сообщить об ошибке кода ошибки, вы не можете ее использовать (перегрузка использует исключение и не принимает ec param)

...