Search code examples
c++boostboost-asio

How to use Boost.Asio c++?


I would try to use the library to use socket Boost.Asio c++ on multiple platforms. I downloaded the latest version here:

http://sourceforge.net/projects/boost/files/boost/1.46.1/

but now what do I use in my code? I have compile it? include just enough? Can you tell me the steps?


Solution

  • How you use it depends on what you want to do, ;-).

    The documentation is found here:

    http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html

    You will find lots of examples that should suite your needs.

    For building, you should note that the library dependancies depend upon whether you are running on windows or linux. See here

    http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/using.html

    In particular:

    With MSVC or Borland C++ you may want to add -DBOOST_DATE_TIME_NO_LIB and -DBOOST_REGEX_NO_LIB to your project settings to disable autolinking of the Boost.Date_Time and Boost.Regex libraries respectively. Alternatively, you may choose to build these libraries and link to them

    If you don't want the dependancies to the other boost libraries then you can use the non-boost (i think otherwise identical asio) library from here: http://think-async.com/

    For sources of other documentation see this question on SO: Best documentation for Boost:asio?

    As an example, to open a serial port you might write something like this:

    /** Manage serial connections.*/
    class serial_manager
    {
    
      boost::asio::io_service m_io_service;
      std::string m_name;
      const unsigned int m_baud_rate;
      const enum flow_control::type m_flow_control;
      const enum parity::type m_parity;
      const enum stop_bits::type m_stop_bits;
      const unsigned int m_char_size;
      boost::asio::serial_port  m_SerialPort;
      boost::system::error_code m_error;
    public:
    
      /** A constructor.
       *  @param name The dvice name, for example "COM1" (windows, or "/dev/ttyS0" (linux).
       *  @param baud_rate The baud rate. 
       *  @param flow_control The flow control. Acceptable values are flow_control::none, flow_control::software, flow_control::hardware.
       *  @param parity The parity of the connection. Acceptable values are parity::none, parity::even, parity::odd.
       *  @param stop_bits The number of stop bits. Acceptable values are stop_bits::one, stop_bits::one_point_five, stop::bits::two
       *  @param char_size The number of characters in connection.
       */
      serial_manager(const std::string& name, 
             const unsigned int& baud_rate  = 19200,
             const enum flow_control::type&   flow_control  = flow_control::none,
             const enum parity::type&         parity        = parity::none,
             const enum stop_bits::type&      stop_bits     = stop_bits::one,
             const unsigned int& char_size  = 8
             ) 
    ;
      void open();
    };
    
    void
    serial_manager::open() {
      if (!m_SerialPort.is_open()) 
        {
          m_SerialPort.open(m_name, m_error);
    
         if (m_error == boost::system::errc::no_such_file_or_directory ) 
         {  //for example you tried to open "COM1" on a linux machine.
            //... handle the error somehow
         }
    
          m_SerialPort.set_option(boost::asio::serial_port::baud_rate(m_baud_rate));
          m_SerialPort.set_option(boost::asio::serial_port::flow_control(m_flow_control));
          m_SerialPort.set_option(boost::asio::serial_port::parity(m_parity));
          m_SerialPort.set_option(boost::asio::serial_port::stop_bits(m_stop_bits));
          m_SerialPort.set_option(boost::asio::serial_port::character_size(m_char_size));
    
    
        }
     }