본문 바로가기

프로그램언어/boost

[ Boost ] boost::asio Part1.

Boost 목록
 

링크 : http://tingcobell.tistory.com/295



대 부분의 프로그램들은 파일, 네트워크, 시리얼 케이블 또는 콘솔에 상호작용에 의하여 동작하게 됩니다. 
어떠한 경우에는 오랜 시간동안 네트워킹, I/O 동작에 의해 완료가 되기도 합니다.

BOOST::ASIO 라이브러리 또한 C++ 프로그래밍을 이용하여 OS의 제어를 할 수 있습니다.

 * Portability ( 이식성 )
 * Scalability ( 확장성 )
 * Efficiency
 * Model concepts from established APIs, such as BSD sockets.
 * Ease of use.
 * Basis for further abstraction.

boost::asio 해부

boost.asio는 동기 or 비동기 소켓을 이용하여 동작합니다. 
아래의 그림은 동기 시스템에 대한 예제입니다.
 

 
boost.asio을 이용하기 위해서는 적어도 하나의 io_service 객체가 존재해야 합니다.

io_service는 OS IO 서비스를 연결해주는 역할을 합니다.
boost::asio::io_service io_service;

I/O 동작을 수행하기 위해서는 I/O object와 같은 tcp 소켓이 필요로 합니다.
boost::asio::ip::tcp::socket socket(io_service);

이때 동기로 연결을 수행하게 되면, 다음과 같이 이벤트가 순차적으로 일어나게 됩니다.

1.
프로그램이 초기화 할때 connect 동작이 I/O object을 호출합니다.
socket.connect(server_endpoint);

    2. I/O Object는 io_service에 전송하게 됩니다.
    3. io_service는 O/S을 호출하여 연결 동작을 수행하게 됩니다.
    4. O/S는 결과를 io_service을 알려주게 됩니다.
    5. io_service의 결과를 전송중 어떠한 에러가 발생하면, boost::system::error_code 의 _error 코드를 
       
I/O object에 결과를 전송하게 됩니다. 
    6. I/O object의 예외처리 boost::system::system_error을 실행하게 됩니다. 만약 동작이 실패하게 되면 초기화 합니다.
boost::system::error_code ec;
socket.connect(server_endpoint, ec);


비동기 동작을 보여주는 그림 입니다. 


1. I/O 객체를 호출하는 connect 동작을 보여주고 있습니다.
socket.async_connect(server_endpoint, your_completion_handler);

          여기서 your_completion_handler is a function or function object with the signature:

void your_completion_handler(const boost::system::error_code& ec);

          어떠한 신호에 의해 비동기 동작을 수행하게 됩니다.

     2. I/O 객체는 io_service에 정보를 전송하게 됩니다.
     3. io_service 신호는 비동기 connect에 연결합니다.



'프로그램언어 > boost' 카테고리의 다른 글

[ boost ] boost.asio.buffer #1  (0) 2011.05.19
[ Boost ] boost::asio Part2  (1) 2011.05.13
[ Boost ] boost::bind Part2  (0) 2011.05.12
[ Boost ] Boost::bind #1  (0) 2011.05.12
[ Boost ] Boost::thread #4  (0) 2011.05.12