Socket
名称
Socket —— 双向的流式IPC传输
概要
socket是双向的流式传输。与channel的不同之处在于,socket仅能传输数据(而不移动句柄)。
描述
通过zx_socket_write写入数据到socket的一端,并通过zx_socket_read从相对端点读取。
创建时,socket的两端都是可写和可读的。 通过zx_socket_write的ZX_SOCKET_SHUTDOWN_READ和ZX_SOCKET_SHUTDOWN_WRITE选项,可以关闭socket的一端以禁用从这一端读取和/或写入数据。
属性
可从socket对象查询以下属性:
ZX_PROP_SOCKET_RX_BUF_MAX:socket接收缓冲区的最大大小,以字节为单位。由于额外的开销,接收缓冲区可能在小于最大容量时候就已经变满。
ZX_PROP_SOCKET_RX_BUF_SIZE:socket接收缓冲区的大小,以字节为单位。
ZX_PROP_SOCKET_TX_BUF_MAX:socket发送缓冲区的最大大小,以字节为单位。由于额外的开销,发送缓冲区可能在小于最大容量时候就已经变满。
ZX_PROP_SOCKET_TX_BUF_SIZE:socket发送缓冲区的大小,以字节为单位。
从socket句柄的角度来看,接收缓冲区包含可通过zx_socket_read() 读取(从相对端点的句柄写入的)数据,同时发送缓冲区包含可通过zx_socket_write() 写入(可从相对端点的句柄读取)的数据。
信号
下列信号可以被设置于socket对象之上:
ZX_SOCKET_READABLE:可从socket中读取数据
ZX_SOCKET_WRITABLE:可将数据写入socket
ZX_SOCKET_PEER_CLOSED:socket的相对端点已关闭。
ZX_SOCKET_SHUTDOWN_READ:由于传递ZX_SOCKET_READ_DISABLED 到此端点或将ZX_SOCKET_SHUTDOWN_WRITE 传递到相对端点,此端点被永久禁用读取(除了已缓冲的数据)。但在禁用读取之前写入socket中的数据,读取socket依然会返回成功。
ZX_SOCKET_WRITE_DISABLED:因为将ZX_SOCKET_SHUTDOWN_WRITE传递给此端点或将ZX_SOCKET_SHUTDOWN_READ传递给相对端点,此端点永久禁用数据写入。
ZX_SOCKET_CONTROL_READABLE:可从socket控制面读取数据。
ZX_SOCKET_CONTROL_WRITABLE:可将数据写入到socket控制面中。
ZX_SOCKET_SHARE:可以通过zx_socket_share发送socket。
ZX_SOCKET_ACCEPT:可以通过zx_socket_accept接收socket。
系统调用
- socket_accept —— 通过socket接收另一个socket对象
- socket_create —— 创建新socket
- socket_read —— 从socket中读取数据
- socket_share —— 通过socket发送另一个socket对象
- socket_write —— 写入数据到socket