最近在查看 Android 的 log 系统,Java 端的 logcat 的所有读写操作最终会调用 liblog 作为 client 端与 logd 这个 server 端进行通讯,使用的是 Unix domain socket。
然后在查看源码的时候发现,当调用 liblog 的写操作的时候(./system/core/liblog/logd_write.c
),最终使用的是 writev()
这个函数,但是在 server 端(./system/core/logd/LogListener.cpp
)进行接收的时候,却是调用 recvmsg()
,LogListener.cpp
在 accept()
之后调用 onDataAvailable()
,首先会进行一个 struct ucred
证书的检查。但是 liblog 如上面所说的在 writev()
的时候是没有准备这个证书的,这就会导致 server 端检查到没有证书而退出。但是事实上是不会的。
所以想请教各位,是不是我遗漏了什么地方,特此请教各位,在此先行感谢了!