先上一个socket相关的UML类图
从上面的socket相关UML类图可以看到在其父类basic_io_object<IoObjectService>中关联了一个stream_socket_service成员变量;
(在此处这所以标红是因为这个类型是一个模板类型 <IoObjectService>在tcp::socket情景下的展开类型,如果是deadline_timer的话这个IoObjectService就会是deadline_timer_service.)
下面是stream_socket相关的简要类图
从上面的类图我们可以看出真正的async_xxx操作是在reactive_socket_service_bask中执行的,这个reactive_socket_service_base才是tcp::socket执行的关键;
在reactive_socket_service_base中定义了一个base_implementation_type类型,下面我们看看这个类型的具体信息:
1 // The implementation type of the socket. 2 struct base_implementation_type 3 { 4 // The native socket representation. 5 socket_type socket_; 6 7 // The current state of the socket. 8 socket_ops::state_type state_; 9 10 // Per-descriptor data used by the reactor. 11 reactor::per_descriptor_data reactor_data_; 12 };
有一个socketfd文件描述符socket_,和一个reactor_data_,这里面的这个reactor_data_也是一个非常关键性