Fork
Asio支持程序使用系统函数fork()。你在适当的时候调用io_service.notify_fork()函数,Asio会调用内核的文件描述符(比如用“self-pipe trick”来等待一个reactor)。代码会像这样:
io_service_.notify_fork(asio::io_service::fork_prepare);
if(fork() == 0)
{
io_service_.notify_fork(asio::io_service::fork_child);
...
}
else
{
io_service_.notify_fork(asio::io_service::fork_parent);
}
用户定义的服务service也可以重写 io_service::service::fork_service()来实现fork操作。
通过Asio的公共API调用的文件描述符(比如basic_socket<>, posix::stream___descriptor)是不会触发fork警告的,管理fork中的资源是程序本身应该处理的逻辑。
参见
io_service::notify_fork(), io_service::fork_event, io_service::service::fork_service(), Fork examples