Boost C++ Libraries/Boost.Asio

Boost.Asio - POSIX 전용 기능 - 포크

까마귀75 2020. 12. 12. 17:26
728x90
반응형

포크 (Fork)

Boost.Asiofork() 시스템 호출을 사용하는 프로그램을 지원한다. 프로그램이 적절한 시점에 io_context.notify_fork()를 호출할 경우, Boost.Asio는 모든 내부 파일 디스크립터(예: reactor를 깨우는 데 사용되는 "self-pipe-trick" 디스크립터)를 다시 만들 것이다. 알림은 일반적으로 다음과 같이 수행된다:

io_context_.notify_fork(boost::asio::io_context::fork_prepare);
if (fork() == 0)
{
  io_context_.notify_fork(boost::asio::io_context::fork_child);
  ...
}
else
{
  io_context_.notify_fork(boost::asio::io_context::fork_parent);
  ...
}

사용자 정의 서비스는 io_context::service::notify_fork() 가상 함수를 재정의하여 fork를 인식하도록 만들 수 있다.

 

Boost.Asio의 공용 API (예: basic_socket<>, posix::stream_descriptor 등의 기저 디스크립터)를 통해 접근할 파일 디스크립터는 fork 중에 변경되지 않는다. 필요에 따라 이를 관리하는 것은 프로그램의 책임이다.

더 보기

io_context::notify_fork(), io_context::fork_event, io_context::service::notify_fork(), Fork example.

 

 

POSIX 전용기능  Boost.Asio 개요  Boost.Asio 홈

728x90
반응형