[/
 / Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 /
 / Distributed under the Boost Software License, Version 1.0. (See accompanying
 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 /]

[section:serial_ports Serial Ports]

Boost.Asio includes classes for creating and manipulating serial ports in a portable
manner. For example, a serial port may be opened using:

  serial_port port(my_io_service, name);

where name is something like `"COM1"` on Windows, and `"/dev/ttyS0"` on POSIX
platforms.

Once opened, the serial port may be used as a [link boost_asio.overview.core.streams
stream]. This means the objects can be used with any of the [link
boost_asio.reference.read read()], [link boost_asio.reference.async_read async_read()],
[link boost_asio.reference.write write()], [link boost_asio.reference.async_write
async_write()], [link boost_asio.reference.read_until read_until()] or [link
boost_asio.reference.async_read_until async_read_until()] free functions.

The serial port implementation also includes option classes for configuring the
port's baud rate, flow control type, parity, stop bits and character size.

[heading See Also]

[link boost_asio.reference.serial_port serial_port],
[link boost_asio.reference.serial_port_base serial_port_base],
[link boost_asio.reference.basic_serial_port basic_serial_port],
[link boost_asio.reference.serial_port_service serial_port_service],
[link boost_asio.reference.serial_port_base__baud_rate serial_port_base::baud_rate],
[link boost_asio.reference.serial_port_base__flow_control serial_port_base::flow_control],
[link boost_asio.reference.serial_port_base__parity serial_port_base::parity],
[link boost_asio.reference.serial_port_base__stop_bits serial_port_base::stop_bits],
[link boost_asio.reference.serial_port_base__character_size serial_port_base::character_size].

[heading Notes]

Serial ports are available on all POSIX platforms. For Windows, serial ports
are only available at compile time when the I/O completion port backend is used
(which is the default). A program may test for the macro
`BOOST_ASIO_HAS_SERIAL_PORTS` to determine whether they are supported.

[endsect]
