2.2.1 main函数分析
最后更新于:2022-04-02 06:01:12
Netd进程的入口函数是其main函数,代码如下所示:
**main.cpp**
~~~
int main() {
CommandListener *cl;
NetlinkManager *nm;
DnsProxyListener *dpl;
MDnsSdListener *mdnsl;
ALOGI("Netd 1.0 starting");
//为Netd进程屏蔽SIGPIPE信号
blockSigpipe();
//①创建NetlinkManager
nm = NetlinkManager::Instance();
//②创建CommandListener,它将创建名为"netd"的监听socket
cl = new CommandListener();
//设置NetlinkManager的消息发送者(Broadcaster)为CommandListener。
nm->setBroadcaster((SocketListener *) cl);
//启动NetlinkManager
nm->start();
......
//注意下面这行代码,它为本Netd设置环境变量ANDROID_DNS_MODE为"local",其作用将在2.2.4节介绍
setenv("ANDROID_DNS_MODE", "local", 1);
//③创建DnsProxyListener,它将创建名为"dnsproxyd"的监听socket
dpl = new DnsProxyListener();
dpl->startListener();
//④创建MDnsSdListener并启动监听,它将创建名为"mdns"的监听socket
mdnsl = new MDnsSdListener();
mdnsl->startListener();
cl->startListener();
while(1) {
sleep(1000);
}
exit(0);
}
~~~
Netd的main函数非常简单,主要是创建几个重要成员并启动相应的工作,这几个重要成员分别是:
- NetlinkManager:它将接收并处理来自Kernel的UEvent消息。这些消息经NetlinkManager解析后将借助它的Broadcaster(也就是代码中为NetlinkManager设置的CommandListener)发送给Framework层的NetworkManagementService。
- CommandListener、DnsProxyListener、MDnsSdListener:分别创建名为"netd"、"dnsproxyd"、"mdns"的监听socket,并处理来客户端的命令。
下面将分别讨论这四位成员的作用。
';