名称

zmq_connect_peer - 从套接字创建传出连接,并以线程安全和原子方式返回连接的路由 ID。

提要

uint32_t zmq_connect_peer (void '*socket', const char '*endpoint');

描述

zmq_connect_peer() 函数将 'ZMQ_PEER' 套接字连接到指定的 'endpoint',然后返回该 endpoint 的 'routing_id'。

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

该函数仅支持 'ZMQ_PEER' 套接字类型,否则将返回 0 并将 'errno' 设置为 'ENOTSUP'。

zmq_connect_peer() 支持以下传输方式:

'tcp'

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

'ipc'

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

'inproc'

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

'ws'

使用 WebSockets 的单播传输,参见 zmq_ws

'wss'

使用 WebSockets over TLS 的单播传输,参见 zmq_wss

返回值

zmq_connect_peer() 函数成功时返回对端的 'routing_id'。否则返回 0 并将 'errno' 设置为以下定义的值之一。

错误

EINVAL

提供的 endpoint 无效。

EPROTONOSUPPORT

请求的 'transport' 协议不支持 'ZMQ_PEER' 套接字。

ENOCOMPATPROTO

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

ETERM

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

ENOTSOCK

提供的 'socket' 无效。

EMTHREAD

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

ENOTSUP

套接字不是 'ZMQ_PEER' 类型。

EFAULT

套接字上设置了 'ZMQ_IMMEDIATE' 选项。

示例

将对端套接字连接到 TCP 传输并发送消息
/* Create a ZMQ_SUB socket */
void *socket = zmq_socket (context, ZMQ_PEER);
assert (socket);
/* Connect it to the host server001, port 5555 using a TCP transport */
uint32_t routing_id = zmq_connect (socket, "tcp://server001:5555");
assert (routing_id == 0);
/* Sending a message to the peer  */
zmq_msg_t msg;
int rc = zmq_msg_init_data (&msg, "HELLO", 5, NULL, NULL);
assert (rc == 0);
rc = zmq_msg_set_routing_id (&msg, routing_id);
assert (rc == 0);
rc = zmq_msg_send (&msg, socket, 0);
assert (rc == 5);
rc = zmq_msg_close (&msg);
assert (rc == 0);

参见

作者

此页面由 0MQ 社区撰写。如需修改,请阅读 0MQ 贡献政策:https://zeromq.cn/how-to-contribute/