本文内容主要参考《Android图形显示系统》
套接字也就是socket,一般用于网络中两个主机之间应用进程进行通信,在同一个主机也可以使用套接字完成进程之间的通信。
在图形显示系统中,用到套接字进行通信的地方主要有VSync信号的分发以及输入事件的分发。
在同一个主机使用套接字不需要关联IP地址和端口,创建套接字的方法如下。
void prepareSocket() { int sockets[2]; if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, sockets)) { } } |
调用socketpair成功后,会返回两个套接字的文件描述符,文件描述符可执行读和写操作,对其中一个文件描述符执行写操作发送数据,另一个文件描述符会收到数据,执行读操作可把数据读取出来,反过来也是可以的,因此套接字可以双向传输。
下面继续了解套接字通信模型,如下图所示。
套接字通信模型
进程A通过socketpair创建了一对套件字,文件描述符分别为FD0和FD1,通过Binder方式把FD0传给进程B,进程B收到的文件描述符为FD0',FD1和FD0'同样是一对具有连接的套接字。进程A向FD1写入数据,进程B可检测到FD0'有数据,执行读操作可把数据读取出来,从而实现了进程A向进程B传输数据,反过来进程B也可向进程A传输数据。