名称

zmq_unbind - 停止在套接字上接受连接

概要

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

描述

zmq_unbind() 函数将解除套接字 ('socket' 参数指定) 与端点 ('endpoint' 参数指定) 的绑定。

此外,与该端点关联的传入消息队列将被丢弃。这意味着在解除端点绑定后,如果消息在解除绑定之前已经存在于传入消息队列中,仍有可能接收到源自同一端点的消息。

'endpoint' 参数的描述请参见 zmq_bind

从套接字解除通配符地址绑定

当在 zmq_bind() 中使用了通配符 * 'endpoint' (描述见 zmq_tcp, zmq_ipc, zmq_udpzmq_vmci) 时,调用者应使用从 ZMQ_LAST_ENDPOINT 套接字选项获取的实际 'endpoint' 来解除此 'endpoint' 与套接字的绑定。

返回值

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

错误

EINVAL

提供的端点无效。

ETERM

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

ENOTSOCK

提供的 'socket' 无效。

ENOENT

提供的端点之前未曾绑定。

示例

解除订阅者套接字与 TCP 传输的绑定
/* Create a ZMQ_SUB socket */
void *socket = zmq_socket (context, ZMQ_SUB);
assert (socket);
/* Connect it to the host server001, port 5555 using a TCP transport */
rc = zmq_bind (socket, "tcp://127.0.0.1:5555");
assert (rc == 0);
/* Disconnect from the previously connected endpoint */
rc = zmq_unbind (socket, "tcp://127.0.0.1:5555");
assert (rc == 0);
解除通配符 * 绑定的套接字
/* Create a ZMQ_SUB socket */
void *socket = zmq_socket (context, ZMQ_SUB);
assert (socket);
/* Bind it to the system-assigned ephemeral port using a TCP transport */
rc = zmq_bind (socket, "tcp://127.0.0.1:*");
assert (rc == 0);
/* Obtain real endpoint */
const size_t buf_size = 32;
char buf[buf_size];
rc = zmq_getsockopt (socket, ZMQ_LAST_ENDPOINT, buf, (size_t *)&buf_size);
assert (rc == 0);
/* Unbind socket by real endpoint */
rc = zmq_unbind (socket, buf);
assert (rc == 0);

注意

请注意,虽然实现类似于 zmq_disconnect(),但语义不同,这两个函数不应互换使用。绑定的套接字应该解除绑定,连接的套接字应该断开连接。

另请参见

作者

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