728x90
반응형
소켓 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 acceptor(ios, endpoint); for (;;) { ip::tcp::iostream stream; acceptor.accept(stream.socket()); ... }
타임 아웃은 기한(deadline)을 정하기 위해 expires_at() 또는 expires_from_now()를 호출하여 설정할 수 있다. 설정 기한 이후 발생하는 모든 소켓 작업은 iostream을 "bad(나쁨)" 상태로 만든다.
예를 들어, 다음과 같은 간단한 클라이언트 프로그램은:
ip::tcp::iostream stream; stream.expires_from_now(boost::posix_time::seconds(60)); stream.connect("www.boost.org", "http"); stream << "GET /LICENSE_1_0.txt HTTP/1.0\r\n"; stream << "Host: www.boost.org\r\n"; stream << "Accept: */*\r\n"; stream << "Connection: close\r\n\r\n"; stream.flush(); std::cout << stream.rdbuf();
모든 소켓 작업을 결합하여 60초 이상 걸리면 실패한다.
오류가 발생하면, iostream의 error() 멤버 함수를 사용하여 가장 최근의 시스템 호출에서 발생한 오류 코드를 찾을 수 있다:
if (!stream) { std::cout << "Error: " << stream.error().message() << "\n"; }
더 보기
ip::tcp::iostream, basic_socket_iostream, iostream examples.
참고
이러한 iostream 템플릿은 wchar_t가 아닌 char만 지원하며, 코드 변환을 수행하지 않는다.
728x90
반응형
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 개요 - 타이머 (0) | 2020.12.11 |
---|---|
Boost.Asio 개요 - 네트워킹 - BSD 소켓 API 및 Boost.Asio (0) | 2020.12.11 |
Boost.Asio 개요 - 네트워킹 - 기타 프로토콜 지원 (0) | 2020.12.10 |
Boost.Asio 개요 - 네트워킹 - TCP, UDP 및 ICMP (0) | 2020.12.10 |
Boost.Asio 개요 - 네트워킹 (0) | 2020.12.10 |