Acceptor
tcp 服务器的核心组件,负责接收新的连接,通过 channel 监听 socket 的可读事件来处理新连接,连通了 socket 和 channel。
// ---------------服务创建方法:
mymuduo::net::Acceptor acceptor(&loop, listenAddr, true);
acceptor.setNewConnectionCallback(newConnection);
// 开始监听
acceptor.listen();
// ---------------核心实现:
using NewConnectionCallback = std::function<void(int sockfd, const InetAddress&)>;
// 设置新连接回调函数
// 当有新连接到达时会调用此回调函数
void setNewConnectionCallback(const NewConnectionCallback& cb) {
newConnectionCallback_ = cb;
}
// 创建一个非阻塞的监听 socket
// 设置 SO_REUSEADDR 和 SO_REUSEPORT 选项
// 绑定到指定地址
// 设置 Channel 的可读回调函数
Acceptor::Acceptor(EventLoop* loop, const InetAddress& listenAddr, bool reuseport)
: loop_(loop), // 记录所属的事件循环
acceptSocket_(sockets::createNonblockingOrDie(listenAddr.family())), // 创建非阻塞 socket
acceptChannel_(loop, acceptSocket_.fd()), // 创建接受通道
listening_(false), // 初始状态为未监听
idleFd_(::open("/dev/null", O_RDONLY | O_CLOEXEC))
{
(idleFd_ >= );
acceptSocket_.();
acceptSocket_.(reuseport);
acceptSocket_.(listenAddr);
acceptChannel_.(std::(&Acceptor::handleRead, ));
}


