从上述代码可以看到,init进程除了会预写入指定文件(例如:system/build.prop)属性外,还会创建一个UNIX Domain Socket,用于接受客户端的请求,构建属性。那这个socket请求是再哪里被处理的呢?
答案是:在init中的for循环处已经进行了相关处理。
服务端处理设置属性请求
接收属性设置请求的地方是在init进程中,相关代码如下所示:
- int main(int argc, char **argv) {
- // ...省略不相关代码
- for (;;) { // ...
- for (i = 0; i < fd_count; i ++) { if (ufds[i].fd == get_property_set_fd())
- handle_property_set_fd(); }
- } }
从上述代码可以看出,当属性服务器收到客户端请求时,init进程会调用handle_property_set_fd函数进行处理,函数位置是:system/core/init/property_service.c,我们来看一下这个函数的实现源码:
- void handle_property_set_fd() {
- prop_msg msg; int s;
- int r; int res;
- struct ucred cr; struct sockaddr_un addr;
- socklen_t addr_size = sizeof(addr); socklen_t cr_size = sizeof(cr);
- char *source_ctx = NULL;
- // 接收TCP连接 if ((s = accept(property_set_fd, (struct sockaddr *) &addr, &addr_size)) < 0) {
- return; }










