Boost.Asio 사용 (Using Boost.Asio)
지원되는 플랫폼 (Supported Platforms)
다음 플랫폼과 컴파일러 조합은 정기적으로 테스트된다:
- g++ 4.1 이상 사용하는 Linux
- clang 3.2 이상 사용하는 Linux
- g++ 4.1 이상 사용하는 FreeBSD
- Xcode 8 이상 사용하는 macOS
- Visual C++9.0 이상 사용하는 Win32
- g++ 4.1 이상(MinGW) 사용하는 Win32
- Visual C++ 9.0 이상 사용하는 Win64
다음 플랫폼도 작동할 수 있다:
- AIX
- Android
- HP-UX
- iOS
- NetBSD
- OpenBSD
- QNX Neutrino
- Solaris
- Tru64
- Cygwin을 사용하는 Win32 (__USE_W32_SOCKET가 정의되어야 함)
의존성 (Dependencies)
Boost.Asio를 사용하는 프로그램을 연결하려면 다음 라이브러리를 사용할 수 있어야 한다:
- boost::system::error_code와 boost::system::system_error 클래스를 위한 Boost.System
- 코-루틴을 사용하기 위해 spawn()을 사용하는 경우 Boost.Coroutine (선택 사항)
- boost::regex 파라미터를 사용하는 read_until()나 async_read_until()의 오버로드 중 하나를 사용하는 경우 Boost.Regex (선택 사항)
- Boost.Asio의 SSL 지원을 사용하는 경우 OpenSSL (선택 사항)
또한, 일부 예제에는 Boost.Thread, Boost.Date_Time나 Boost.Serialization 라이브러리가 필요하다.
☞참고
MSVC 또는 Borland C++를 사용하면 프로젝트 설정에서 -DBOOST_DATE_TIME_NI_LIB 및 -DBOOST_REGEX_NO_LIB를 추가하여 Boost.Date_Time 및 Boost.Regex 라이브러리의 자동 링크를 사용하지 않도록 개별적으로 설정할 수 있다. 또는 이런 라이브러리를 빌드하고 링크하도록 선택할 수 있다.
Boost 라이브러리 빌드 (Building Boost Libraries)
Boost 다운로드 패키지의 루트에서 다음 명령을 실행하여, Boost.Asio 및 해당 예제를 사용하는데 필요한 Boost 라이브러리의 하위 집합을 빌드할 수 있다.
b2 --with-system --with-thread --with-date_time --with-regex --with-serialization stage
이것은 이미 b2를 빌드했다고 가정한 것이다. 자세한 내용은 Boost.Build 문서를 참조한다.
선택적으로 분리된 컴파일 (Optional separate compilation)
기본적으로 Boost.Asio는 헤더 전용 라이브러리이다. 그러나 일부 개발자들은 별도로 컴파일된 소스 코드를 사용하여 Boost.Asio를 빌드하는 것을 선호할 수 있다. 이렇게 하려면, 프로그램에서 하나(및 단 하나)의 소스 파일에 "#include <boost/asio/impl/src.hpp>"를 추가한 다음 "project/compiler" 설정에서 BOOST_ASIO_SEPARATE_COMPILATION를 정의하여 프로그램을 빌드한다. 또는, BOOST_ASIO_DYN_LINK를 정의하여 별도로 컴파일된 Boost.Asio를 공유 라이브러리의 일부로 빌드할 수 있다.
Boost.Asio의 SSL 지원을 사용하려면, "#include <boost/asio/ssl/impl/src.hpp>"를 추가해야 한다.
매크로 (Macros)
아래 표에 나열된 매크로를 사용하여 Boost.Asio의 동작을 제어할 수 있다.
매크로 | 설명 |
BOOST_ASIO_ENABLE_BUFFER_DEBUGGING | Boost.Asio의 버퍼 디버깅 지원을 활성화하여 읽기/쓰기 작업에서 잘못된 버퍼가 사용되는 시점을 식별하는데 도움이 될 수 있다. (예: 쓰기 작업이 완료되기 전에 저장작업 중인 std::string 개체가 소멸되는 경우) Microsoft Visual C++ 11.0 이상을 사용하는 경우, BOOST_ASIO_DISABLE_BUFFER_DEBUGGING이 정의되지 않고 컴파일러의 iterator(반복기) 디버깅 지원이 활성화되면 자동으로 이 매크로가 정의된다. g++를 사용하는 경우, BOOST_ASIO_DISABLE_BUFFER_DEBUGGING이 정의되지 않고 표준 라이브러리 디버깅이 활성화되면 (_GLIBCXX_DEBUG가 정의됨) 자동으로 이 매크로가 정의된다. |
BOOST_ASIO_DISABLE_BUFFER_DEBUGGING | Boost.Asio의 버퍼 디버깅 지원을 명시적으로 비활성화한다. |
BOOST_ASIO_DISABLE_DEV_POLL | 솔라리스(Solaris)에서 /dev/poll 지원을 명시적으로 비활성화하여, select 기반의 구현을 사용하도록 강제한다. |
BOOST_ASIO_DISABLE_EPOLL | Linux에서 epoll 지원을 명시적으로 비활성화하여, select 기반의 구현을 사용하도록 강제한다. |
BOOST_ASIO_DISABLE_EVENTED | Linux에서 eventfd 지원을 명시적으로 비활성화하여, 블럭된 epoll/select 시스템 호출을 인터럽트 파이프를 사용하도록 강제한다. |
BOOST_ASIO_DISABLE_KQUEUE | macOS 및 BSD 계열에서 kqueue 지원을 명시적으로 비활성화하여, select 기반 구현을 사용하도록 강제한다. |
BOOST_ASIO_DISABLE_IOCP | Windows에서 I/O 완료 포트 지원을 명시적으로 비활성화하여, select 기반 구현을 사용하도록 강제한다. |
BOOST_ASIO_DISABLE_THREADS | 전체적으로 Boost에서 스레드 지원 여부에 관계 없이, Boost.Asio의 스레드 지원을 명시적으로 비활성화한다. |
BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN | 기본적으로 Boost.Asio를 Windows 용으로 컴파일하는 경우, WIN32_LEAN_AND_MEAN을 자동으로 정의하여 포함되는 Windows SDK 헤더 파일 및 기능의 수를 최소화한다. BOOST_ASIO_NO_LEAN_AND_MEAN이 존재하면 WIN32_LEAN_AND_MEAN이 정의되지 않는다. |
BOOST_ASIO_NO_NOMINMAX | 기본적으로 Boost.Asio를 Windows 용으로 컴파일하는 경우 자동으로 NOMINMAX를 정의하여 min() 및 max() 매크로의 정의를 숨긴다. BOOST_ASIO_NO_NOMINMAX가 존재하면 NOMINMAX가 정의되지 않는다. |
BOOST_ASIO_NO_DEFAULT_LINKED_LIBS | Microsoft Visual C++ 또는 Borland C++를 사용하여 Windows 용으로 컴파일하는 경우, Boost.Asio는 소켓 지원(예: ws2_32.lib 및 mswsock.lib 또는 Windows CE 용으로 빌드하는 경우 ws2.lib)에 필요한 Windows SDK 라이브러리로 자동적으로 링크된다. BOOST_ASIO_NO_DEFAULT_LINKED_LIBS 매크로는 이러한 라이브러리가 링크되는 것을 방지한다. |
BOOST_ASIO_ENABLE_CANCEL_IO | 이전 버전의 Windows에는 CancelIo 함수를 사용하도록 활성화되어 있다. 활성화되지 않은 경우, Windows XP, Windows Server 2003 및 이전 버전의 Windows에서 실행할 때 소켓 개체에 대한 cancel() 호출은 항상 asio::error::operation_not_supported와 함께 실패한다. Windows Vista, Windows Server 2008 이상에서 실행하는 경우 항상 CancelIoEx 함수를 사용된다. CancelIo 함수 사용을 활성화하기 전에 고려해야 할 두 가지 문제가 있다: * 현재 스레드에서 시작된 비동기 작업만 취소한다. * 오류없이 완료된 것처럼 보일 수 있지만, 완료되지 않은 작업을 취소하라는 요청은 운영 체제에서 무시될 수 있다. 작동 여부는 설치된 드라이버에 따라 달라질 수 있다. 간단한 취소의 경우, 다음 대안 중 하나를 사용하는 것이 좋다: * BOOST_ASIO_DISABLE_IOCP를 정의하여 asio의 I/O 완료 포트 백엔드를 비활성화 한다. * 소켓 개체의 close() 함수를 사용하여 미처리된 작업을 동시에 취소하고 소켓을 닫는다. |
BOOST_ASIO_NO_TYPEID | Boost.Asio에서 typeid 연산자 사용을 비활성화 한다. BOOST_NO_TYPEID가 정의된 경우 자동으로 정의된다. |
BOOST_ASIO_HASH_MAP_BUCKETS | Boost.Asio의 내부 hash_map 개체에서 버킷 수를 결정한다. 값은 오름차순의 소수 목록으로 쉼표로 구분되어 있다. hash_map 구현은 맵의 요소 수가 증가함에 따라 자동으로 버킷 수를 증가시킨다. 몇 가지 예제: * BOOST_ASIO_HASH_MAP_BUKETS를 1021로 정의하면, 맵의 요소 수에 관계없이 hash_map 개체에 항상 1021개의 버킷이 포함됨을 의미한다. * BOOST_ASIO_HASH_MAP_BUKETS를 53,389,1543으로 정의하면, hash_map 개체는 초기에 53개의 버킷이 포함됨을 의미한다. 버킷의 수는 맵에 요소가 추가됨에 따라 389개에서 1543개로 증가하게 된다. |
Mailing List
Boost.Asio 전용 메일링 리스트는 SourceForge.net에서 찾을 수 있다. 뉴스그룹 접근은 Gmane를 통해 제공된다.
※ 글을 쓰는 시점에서 Gmane의 링크는 접근이 안된다.
Wiki
사용자는 Boost.Asio wiki에서 예제, 팁 및 FAQ를 공유하는 것이 좋다.
'Boost C++ Libraries > Boost.Asio' 카테고리의 다른 글
Boost.Asio 튜토리얼 - Timer.1 - 타이머를 동기식으로 사용 (0) | 2020.12.14 |
---|---|
Boost.Asio 튜토리얼 (0) | 2020.12.14 |
Boost.Asio 개요 - 플랫폼별 구현 정보 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 - 퓨쳐 (0) | 2020.12.13 |
Boost.Asio 개요 - C++ 2011 지원 - 크로노 (0) | 2020.12.13 |