직렬 포트 (Serial Ports) Boost.Asio에는 이식 가능한 방식으로 직렬 포트를 생성하고 조작하기 위한 클래스가 포함되어 있다. 예를 들어, 직렬 포트는 다음과 같이 열 수 있다: serial_port port(my_io_context, name); 여기서 name은 Windows에서는 "COM1", POSIX 플랫폼에서는 "/dev/ttyS0"와 같다. 일단 열리면, 직렬 포트를 스트림으로 사용할 수 있다. 이는 객체가 read(), async_read(), wrtie(), async_write(), read_until(), async_read_until() 중 사용 가능한 함수와 함께 사용될 수 있음을 의미한다. 직렬 포트 구현에는 포트의 전송 속도, 흐름 제어 유형, 패리티, 정지 비..
타이머 (Timers) 긴 시간 실행되는 I/O 작업에는 완료 기한이 주어지는 경우가 많다. 이러한 기한은 절대 시간으로 표현될 수 있지만, 현재 시간에서 비례하여 계산되는 경우가 많다. 간단한 예로, 타이머에서 상대 시간을 사용하여 동기식 대기 작업을 수행하려면 다음과 같이 작성한다: io_context i; ... deadline_timer t(i); t.expires_from_now(boost::posix_time::seconds(5)); t.wait(); 더 일반적으로 프로그램은 타이머에서 비동기식 대기 작업을 수행한다: void handler(boost::system::error_code ec) { ... } ... io_context i; ... deadline_timer t(i); t.exp..
BSD 소켓 API 및 Boost.Asio (The BSD Socket API and Boost.Asio) Boost.Asio 라이브러리에는 광범위한 문헌으로 널리 구현되고 지원되는 BSD 소켓 API를 기반으로 하는 저수준(low-level) 소켓 인터페이스가 포함되어 있다. 또한 JAVA와 같은 다른 언어로 된 네트워킹 API의 기반으로도 사용된다. 이 저수준(low-level) 인터페이스는 효율적이고 확장 가능한 응용 프로그램 개발을 지원하도록 설계되어 있다. 예를 들어, 프로그래머가 시스템 호출의 수를 보다 세밀하게 제어할 수 있고, 중복 데이터 복사를 방지하며, 스레드와 같은 리소스 사용을 최소화할 수도 있다. BSD 소켓 API의 불안전하고 오류 발생이 쉬운 측면은 포함하지 않는다. 예를 들어..
소켓 Iostreams (Socket Iostreams) Boost.Asio에는 소켓 위에 iostream을 구현한 클래스를 포함하고 있다. 이는 엔드포인트(endpoint) 확인, 프로토콜 독립성 등과 관련된 복잡성을 숨긴다. 연결을 생성하려면 다음과 같이 작성하면 된다: ip::tcp::iostream stream("www.boost.org", "http"); if (!stream) { // Can't connect. } iostream 클래스는 또한 간단한 서버를 만들기 위해 승인기(acceptor)와 함께 사용될 수 있다. 예를 들면 다음과 같다: io_context ioc; ip::tcp::endpoint endpoint(tcp::v4(), 80); ip::tcp::acceptor accepto..
기타 프로토콜 지원 (Support for Other Protocols) Protocol type requirements(프로토콜 유형 요구사항)을 구현하여 다른 소켓 프로토콜(예: Bluetooth 또는 IRCOMM 소켓)에 대한 지원을 추가할 수 있다. 그러나 대부분의 경우 이런 프로토콜들은 Boost.Asio의 일반적인 지원과 함께 사용될 수 있다. 이를 위해, Boost.Asio는 다음 네 가지 클래스를 제공한다: generic::datagram_protocol generic::raw_protocol generic::seq_packet_protocol generic::stream_protocol 이런 클래스는 프로토콜 유형 요구사항을 구현하지만, 사용자가 런타임에 주소 패밀리(예: AF_INET)..