名称

zmq_connect - 从套接字创建传出连接

概要

int zmq_connect (void '*socket', const char '*endpoint');

描述

zmq_connect() 函数将 'socket' 连接到 'endpoint',然后接受该端点上的传入连接。

'endpoint' 是一个字符串,由 'transport'`://` 后跟一个 'address' 组成。'transport' 指定要使用的底层协议。'address' 指定要连接的特定于传输的地址。

0MQ 提供以下传输方式

'tcp'

使用 TCP 的单播传输,参见 zmq_tcp

'ipc'

本地进程间通信传输,参见 zmq_ipc

'inproc'

本地进程内(线程间)通信传输,参见 zmq_inproc

'pgm', 'epgm'

使用 PGM 的可靠多播传输,参见 zmq_pgm

'vmci'

虚拟机通信接口 (VMCI),参见 zmq_vmci

'udp'

使用 UDP 的不可靠单播和多播,参见 zmq_udp

除 'ZMQ_PAIR' 和 'ZMQ_CHANNEL' 之外的每个 0MQ 套接字类型都支持一对多和多对一语义。具体的语义取决于套接字类型,并在 zmq_socket 中定义。

注意
对于大多数传输方式和套接字类型,连接不是立即执行的,而是根据 0MQ 的需要执行的。因此,成功调用 zmq_connect() 并不意味着连接已经或能够实际建立。正因为如此,对于大多数传输方式和套接字类型来说,'server' 套接字绑定的顺序和 'client' 套接字连接到它的顺序并不重要。ZMQ_PAIRZMQ_CHANNEL 套接字是例外,它们不会自动重新连接到端点。
注意
在调用 zmq_connect() 之后,除了 ZMQ_ROUTER 之外的套接字类型,套接字进入其正常的 'ready' 状态。相比之下,仅在调用 zmq_bind() 之后,套接字进入 'mute' 状态,在该状态下,套接字根据套接字类型阻塞或丢弃消息,如 zmq_socket 中定义。ZMQ_ROUTER 套接字仅在该对等方的握手完成时进入其正常的 'ready' 状态,这可能需要任意时间。
注意
对于某些套接字类型,连接到同一端点多次并没有真正的意义(参见 https://github.com/zeromq/libzmq/issues/788)。对于这些套接字类型,任何连接到已连接端点的尝试都会被静默忽略(即返回零)。此行为适用于 ZMQ_DEALER、ZMQ_SUB、ZMQ_PUB 和 ZMQ_REQ 套接字类型。

返回值

zmq_connect() 函数成功时返回零。否则返回 -1 并将 'errno' 设置为下面定义的值之一。

错误

EINVAL

提供的端点无效。

EPROTONOSUPPORT

请求的 'transport' 协议不受支持。

ENOCOMPATPROTO

请求的 'transport' 协议与套接字类型不兼容。

ETERM

与指定 'socket' 关联的 0MQ 'context' 已终止。

ENOTSOCK

提供的 'socket' 无效。

EMTHREAD

没有可用的 I/O 线程来完成此任务。

示例

将订阅者套接字连接到进程内和 TCP 传输
/* Create a ZMQ_SUB socket */
void *socket = zmq_socket (context, ZMQ_SUB);
assert (socket);
/* Connect it to an in-process transport with the address 'my_publisher' */
int rc = zmq_connect (socket, "inproc://my_publisher");
assert (rc == 0);
/* Connect it to the host server001, port 5555 using a TCP transport */
rc = zmq_connect (socket, "tcp://server001:5555");
assert (rc == 0);

另请参阅

作者

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