타이머 (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)..
TCP, UDP 및 ICMP (TCP, UDP and ICMP) Boost.Asio는 인터넷 프로토콜인 TCP, UDP 및 ICMP등 기성 프로토콜에 대한 지원을 제공한다. TCP 클라이언트 호스트 이름 확인은 리졸버(resolver)를 사용해 수행된다. 여기서 호스트와 서비스 이름이 조회되고 하나 이상의 엔드포인트(endpoint)로 변환된다: ip::tcp::resolver resolver(my_io_context); ip::tcp::resolver::query query("www.boost.org", "http"); ip::tcp::resolver::iterator iter = resolver.resolve(query); ip::tcp::resolver::iterator end; // End mar..