简介
在asio中,task_io_servcie对应linux下的事件循环,win_iocp_io_service对应window下的事件循环,在这个事件循环基础上,需要套接字的基础服务,其对socket作了一层封装。linux下对应的是reactive_socket_service_base,window下对应的是win_iocp_socket_service_base
套接字基础服务
reactive_socket_service_base
construct
初始化base_implementation_type,设置socket_为无效值,state_为0
void reactive_socket_service_base::construct(
reactive_socket_service_base::base_implementation_type& impl)
{
impl.socket_ = invalid_socket;
impl.state_ = 0;
}
在其上层的服务没有指定endpoint时,仅仅传参io_service时,调用的是socket基础服务的construct
explicit basic_io_object(boost::asio::io_service& io_service)
: service(boost::asio::use_service<IoObjectService>(io_service))
{
service.construct(implementation);
}
win_iocp_socket_service_base
construct
初始化base_implementation_type,设置socket_为无效值,state_为0,cancel_token_设置为null, 并且将新创建的base_implementation_type添加到impl_list_链表头部
void win_iocp_socket_service_base::construct(
win_iocp_socket_service_base::base_implementation_type& impl)
{
impl.socket_ = invalid_socket;
impl.state_ = 0;
impl.cancel_token_.reset();
#if defined(BOOST_ASIO_ENABLE_CANCELIO)
impl.safe_cancellation_thread_id_ = 0;
#endif // defined(BOOST_ASIO_ENABLE_CANCELIO)
// Insert implementation into linked list of all implementations.
boost::asio::detail::mutex::scoped_lock lock(mutex_);
impl.next_ = impl_list_;
impl.prev_ = 0;
if (impl_list_)
impl_list_->prev_ = &impl;
impl_list_ = &impl;
}