名称
zmq_connect - 从套接字创建传出连接
概要
int zmq_connect (void '*socket', const char '*endpoint');
描述
zmq_connect() 函数将 'socket' 连接到 'endpoint',然后接受该端点上的传入连接。
'endpoint' 是一个字符串,由 'transport'`://` 后跟一个 'address' 组成。'transport' 指定要使用的底层协议。'address' 指定要连接的特定于传输的地址。
0MQ 提供以下传输方式
除 'ZMQ_PAIR' 和 'ZMQ_CHANNEL' 之外的每个 0MQ 套接字类型都支持一对多和多对一语义。具体的语义取决于套接字类型,并在 zmq_socket 中定义。
注意
|
对于大多数传输方式和套接字类型,连接不是立即执行的,而是根据 0MQ 的需要执行的。因此,成功调用 zmq_connect() 并不意味着连接已经或能够实际建立。正因为如此,对于大多数传输方式和套接字类型来说,'server' 套接字绑定的顺序和 'client' 套接字连接到它的顺序并不重要。ZMQ_PAIR 和 ZMQ_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/。