Acceptor用于接受(accept)客户端的连接,通过设置回调函数通知使用者。它只在muduo网络库内部的TcpServer使用,由TcpServer控制它的生命期。
实际上,Acceptor只是对 Channel 的封装,通过Channel关注listenfd的 readable可读事件 ,并设置好回调函数就可以了。因此理解了上一节的muduo:Reactor,那么Acceptor也比较容易理解。
Acceptor.h
class Acceptor : boost::noncopyable
{
public:
typedef boost::function<void (int sockfd, const InetAddress&)> NewConnectionCallback;
Acceptor(EventLoop* loop, const InetAddress& listenAddr, bool reuseport);
~Acceptor();
void setNewConnectionCallback(const NewConnectionCallback& cb) //设置新连接处理回调
{ newConnectionCallback_ = cb; }
bool listenning() const { return listenning_; }
void listen(); //启动监听套接字
private:
void handleRead(); //处理新连接到来的函数
EventLoop* loop_;
Socket acceptSocket_; //监听套接字,Socket是个RAII型&#