asio之套接字基础服务

简介

在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

reactive_socket_service_base
#reactor& reactor_
+void construct(base_implementation_type& impl)
base_implementation_type
+socket_type socket_
+socket_ops::state_type state_
+reactor::per_descriptor_data reactor_data_

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

win_iocp_socket_service_base
#boost::asio::io_service& io_service_
#win_iocp_io_service& iocp_service_
#reactor* reactor_
#void* connect_ex_
#boost::asio::detail::mutex mutex_
#base_implementation_type* impl_list_
+void construct(base_implementation_type& impl)
base_implementation_type
+socket_type socket_
+socket_ops::state_type state_
+socket_ops::shared_cancel_token_type cancel_token_
+reactor::per_descriptor_data reactor_data_
+base_implementation_type* next_
+base_implementation_type* prev_

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值