名称

zmq_vmci - 0MQ 虚拟机通信接口 (VMCI) 套接字传输协议

概要

VMCI 传输协议用于在运行于同一主机上的 VMware 虚拟机之间、虚拟机与主机之间以及虚拟机内部(类似 ipc 的进程间传输)传递消息。

注意
在 Mac OS X 10.9 及更高版本上不支持虚拟机与主机之间的通信。

地址格式

一个 0MQ 端点是一个由 'transport'`://` 后跟一个 'address' 组成的字符串。'transport' 指定底层协议。'address' 指定特定于传输协议的连接地址。

对于 VMCI 传输协议,'transport' 是 vmci,而 'address' 部分的含义如下所述。

绑定套接字

使用 'vmci' 传输协议通过 zmq_bind() 将 'socket' 绑定到本地地址时,'endpoint' 应被解释为一个 'interface' 后跟一个冒号和要使用的端口号。

一个 'interface' 可以指定为以下任一形式:

  • 通配符 *,表示所有可用接口。

  • VMCISock_GetLocalCID 返回的整数或 @ (ZeroMQ 内部将调用 VMCISock_GetLocalCID)。

端口可以指定为:

  • 一个数值,在 POSIX 系统上通常大于 1024。

  • 通配符 *,表示系统分配的临时端口。

解绑套接字中的通配符地址

当在 zmq_bind() 中使用了通配符 * 'endpoint' 时,调用者应该使用从 ZMQ_LAST_ENDPOINT 套接字选项获取的实际 'endpoint' 来使用 zmq_unbind() 解绑该 'endpoint'。

连接套接字

使用 'vmci' 传输协议通过 zmq_connect() 将套接字连接到对端地址时,'endpoint' 应被解释为一个 'peer address' 后跟一个冒号和要使用的端口号。

一个 'peer address' 必须是对端的 CID。

示例

将本地地址分配给套接字
//  VMCI port 5555 on all available interfaces
rc = zmq_bind(socket, "vmci://*:5555");
assert (rc == 0);
//  VMCI port 5555 on the local loop-back interface on all platforms
cid = VMCISock_GetLocalCID();
sprintf(endpoint, "vmci://%d:5555", cid);
rc = zmq_bind(socket, endpoint);
assert (rc == 0);
连接套接字
//  Connecting using a CID
sprintf(endpoint, "vmci://%d:5555", cid);
rc = zmq_connect(socket, endpoint);
assert (rc == 0);

另请参阅

作者

此页面由 0MQ 社区编写。要进行更改,请阅读 0MQ 贡献策略:https://zeromq.cn/how-to-contribute/