名称

zmq_setsockopt - 设置 0MQ 套接字选项

概要

int zmq_setsockopt (void '*socket', int 'option_name', const void '*option_value', size_t 'option_len');

注意:除 ZMQ_SUBSCRIBE、ZMQ_UNSUBSCRIBE、ZMQ_LINGER、ZMQ_ROUTER_HANDOVER、ZMQ_ROUTER_MANDATORY、ZMQ_PROBE_ROUTER、ZMQ_XPUB_VERBOSE、ZMQ_XPUB_VERBOSER、ZMQ_REQ_CORRELATE、ZMQ_REQ_RELAXED、ZMQ_SNDHWM 和 ZMQ_RCVHWM 外,所有其他选项仅对后续的套接字绑定/连接生效。

具体来说,安全选项对后续的 bind/connect 调用生效,并且可以随时更改以影响后续的绑定和/或连接。

描述

zmq_setsockopt() 函数将为由 'socket' 参数指向的 0MQ 套接字设置 'option_name' 参数指定的选项,其值由 'option_value' 参数指向。'option_len' 参数是选项值的字节大小。对于接受类型为“字符字符串”的值的选项,提供的字节数据应不包含零字节,或者以单个零字节(终止 ASCII 空字符)结尾。

以下套接字选项可以使用 zmq_setsockopt() 函数设置:

ZMQ_AFFINITY:设置 I/O 线程亲和性

‘ZMQ_AFFINITY' 选项将为指定 'socket' 上新创建的连接设置 I/O 线程亲和性。

亲和性决定了与套接字的 context 相关联的 0MQ I/O 线程池中的哪些线程将处理新创建的连接。值为零表示没有亲和性,意味着工作将在线程池中的所有 0MQ I/O 线程之间公平分配。对于非零值,最低位对应于线程 1,次低位对应于线程 2,依此类推。例如,值为 3 指定 'socket' 上的后续连接将仅由 I/O 线程 1 和 2 处理。

有关为特定 context 分配 I/O 线程数量的详细信息,请参见 zmq_init

选项值类型

uint64_t

选项值单位

不适用 (位图)

默认值

0

适用套接字类型

不适用

ZMQ_BACKLOG:设置未完成连接队列的最大长度

‘ZMQ_BACKLOG' 选项将设置指定 'socket' 的未完成对等连接队列的最大长度;这仅适用于面向连接的传输。有关详细信息,请参阅操作系统关于 'listen' 函数的文档。

选项值类型

int

选项值单位

连接数

默认值

100

适用套接字类型

所有套接字类型,仅适用于面向连接的传输。

ZMQ_BINDTODEVICE:设置套接字绑定的设备名称

‘ZMQ_BINDTODEVICE' 选项将此套接字绑定到特定的设备,例如接口或 VRF。如果套接字绑定到接口,则套接字只处理从该特定接口接收到的数据包。如果设备是 VRF 设备,则后续绑定/连接到该套接字将使用 VRF 路由表中的地址。

注意
需要为编译后的程序设置 CAP_NET_RAW 能力。
选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 或 UDP 传输时。

ZMQ_BUSY_POLL:此选项可消除中断和由此产生的上下文切换带来的延迟。

忙轮询(Busy polling)通过允许套接字层代码轮询网络设备的接收队列并禁用网络中断,有助于减少网络接收路径中的延迟。这消除了中断和由此产生的上下文切换带来的延迟。然而,它也会增加 CPU 利用率。忙轮询还会阻止 CPU 进入睡眠状态,这可能会产生额外的功耗。

选项值类型

int

选项值单位

0,1

默认值

0

适用套接字类型

所有套接字类型

ZMQ_CONNECT_RID:分配下一个出站连接 ID

此选项名称现已弃用。请改用 ZMQ_CONNECT_ROUTING_ID。ZMQ_CONNECT_RID 暂时仍作为别名。

ZMQ_CONNECT_ROUTING_ID:分配下一个出站路由 ID

'ZMQ_CONNECT_ROUTING_ID' 选项设置通过下一个 zmq_connect() 调用连接的对等方的对等 ID,以便该连接立即可以使用给定的路由 ID 进行数据传输。此选项仅适用于第一次后续的 zmq_connect() 调用,此后的 zmq_connect() 调用将使用默认连接行为。

典型用法是在每次 zmq_connect() 调用之前设置此套接字选项。每个连接都必须分配一个唯一的路由 ID。不允许分配已在使用中的路由 ID。

当连接 ROUTER 到 ROUTER 或 STREAM 到 STREAM 时非常有用,因为它允许立即向对等方发送数据。ROUTE 和 STREAM 套接字的出站路由 ID 帧格式要求适用。

路由 ID 必须介于 1 到 255 字节长,并且不能以零字节开头(此类路由 ID 保留供 0MQ 基础设施内部使用)。

选项值类型

二进制数据

选项值单位

不适用

默认值

NULL

适用套接字类型

ZMQ_ROUTER, ZMQ_STREAM

ZMQ_CONFLATE:仅保留最后一条消息

如果设置,套接字将在其入站/出站队列中仅保留一条消息,该消息是最后一条收到的消息/最后一条待发送的消息。忽略 'ZMQ_RCVHWM' 和 'ZMQ_SNDHWM' 选项。不支持多部分消息,特别是,其内部队列中只保留其中的一个部分。

注意
如果在入站套接字上未调用 recv,队列和内存将随着每条接收到的消息而增长。使用带有 ZMQ_EVENTS 选项的 zmq_getsockopt 可以触发消息的合并(conflation)。
选项值类型

int

选项值单位

布尔值

默认值

0 (假)

适用套接字类型

ZMQ_PULL, ZMQ_PUSH, ZMQ_SUB, ZMQ_PUB, ZMQ_DEALER

ZMQ_CONNECT_TIMEOUT:设置 connect() 超时时间

设置在 connect() 系统调用超时前等待的时间。connect() 系统调用通常需要很长时间才会返回超时错误。设置此选项允许库在较早的时间间隔内使调用超时。

选项值类型

int

选项值单位

毫秒

默认值

0 (禁用)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_CURVE_PUBLICKEY:设置 CURVE 公钥

设置套接字的长期公钥。您必须在 CURVE 客户端套接字上设置此选项,请参见 zmq_curve。您可以将密钥提供为 32 个二进制字节,或作为采用 Z85 编码格式编码的 40 字符字符串并以空字节终止。公钥必须始终与匹配的私钥一起使用。要生成公钥/私钥对,请使用 zmq_curve_keypair。要从私钥派生公钥,请使用 zmq_curve_public

注意
为了向后兼容支持选项值大小为 40,但这已弃用。
选项值类型

二进制数据或 Z85 文本字符串

选项值大小

32 或 41

默认值

NULL

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_CURVE_SECRETKEY:设置 CURVE 私钥

设置套接字的长期私钥。您必须在 CURVE 客户端和服务器套接字上设置此选项,请参见 zmq_curve。您可以将密钥提供为 32 个二进制字节,或作为采用 Z85 编码格式编码的 40 字符字符串并以空字节终止。要生成公钥/私钥对,请使用 zmq_curve_keypair。要从私钥派生公钥,请使用 zmq_curve_public

注意
为了向后兼容支持选项值大小为 40,但这已弃用。
选项值类型

二进制数据或 Z85 文本字符串

选项值大小

32 或 41

默认值

NULL

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_CURVE_SERVER:设置 CURVE 服务器角色

定义套接字是否充当 CURVE 安全服务器,请参见 zmq_curve。值为 '1' 意味着套接字将充当 CURVE 服务器。值为 '0' 意味着套接字将不充当 CURVE 服务器,其安全角色将取决于其他选项设置。将其设置为 '0' 将把套接字安全重置为 NULL。设置此选项时,还必须使用 ZMQ_CURVE_SECRETKEY 选项设置服务器的私钥。服务器套接字不需要知道自己的公钥。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_CURVE_SERVERKEY:设置 CURVE 服务器公钥

设置套接字的长期服务器公钥。您必须在 CURVE 客户端套接字上设置此选项,请参见 zmq_curve。您可以将密钥提供为 32 个二进制字节,或作为采用 Z85 编码格式编码的 40 字符字符串并以空字节终止。此密钥必须与服务器的私钥一起生成。要生成公钥/私钥对,请使用 zmq_curve_keypair

注意
为了向后兼容支持选项值大小为 40,但这已弃用。
选项值类型

二进制数据或 Z85 文本字符串

选项值大小

32 或 41

默认值

NULL

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_DISCONNECT_MSG:设置当接受的对等方断开连接时套接字将生成的断开连接消息

设置后,当接受的对等方断开连接时,套接字将生成断开连接消息。您可以在 ROUTER、SERVER 和 PEER 套接字上设置此选项。与 ZMQ_HEARTBEAT_IVL 结合使用非常强大并简化协议,当心跳检测到连接丢失时,它将生成与应用程序协议匹配的断开连接消息。

选项值类型

二进制数据

选项值单位

不适用

默认值

NULL

适用套接字类型

ZMQ_ROUTER, ZMQ_SERVER 和 ZMQ_PEER

ZMQ_HICCUP_MSG:设置当连接的对等方临时断开连接时套接字将生成的 hiccup 消息

设置后,当连接的对等方断开连接时,套接字将生成 hiccup 消息。您可以在 DEALER、CLIENT 和 PEER 套接字上设置此选项。与 ZMQ_HEARTBEAT_IVL 结合使用非常强大并简化协议,当心跳检测到连接丢失时,它将生成与应用程序协议匹配的 hiccup 消息。

选项值类型

二进制数据

选项值单位

不适用

默认值

NULL

适用套接字类型

ZMQ_DEALER, ZMQ_CLIENT 和 ZMQ_PEER

ZMQ_GSSAPI_PLAINTEXT:禁用 GSSAPI 加密

定义套接字上的通信是否会加密,请参见 zmq_gssapi。值为 '1' 意味着通信将是明文。值为 '0' 意味着通信将是加密的。

选项值类型

int

选项值单位

0, 1

默认值

0 (假)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_GSSAPI_PRINCIPAL:设置 GSSAPI 主体名称

设置应为其获取 GSSAPI 凭据的主体的名称。

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_GSSAPI_SERVER:设置 GSSAPI 服务器角色

定义套接字是否充当 GSSAPI 安全服务器,请参见 zmq_gssapi。值为 '1' 意味着套接字将充当 GSSAPI 服务器。值为 '0' 意味着套接字将充当 GSSAPI 客户端。

选项值类型

int

选项值单位

0, 1

默认值

0 (假)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_GSSAPI_SERVICE_PRINCIPAL:设置 GSSAPI 服务主体名称

设置 GSSAPI 客户端打算连接的 GSSAPI 服务器的主体名称。

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_GSSAPI_SERVICE_PRINCIPAL_NAMETYPE:设置服务主体的名称类型

设置 GSSAPI 服务主体的名称类型。值为 'ZMQ_GSSAPI_NT_HOSTBASED' (0) 意味着使用 'ZMQ_GSSAPI_SERVICE_PRINCIPAL' 指定的名称被解释为基于主机的名称。值为 'ZMQ_GSSAPI_NT_USER_NAME' (1) 意味着它被解释为本地用户名。值为 'ZMQ_GSSAPI_NT_KRB5_PRINCIPAL' (2) 意味着它被解释为未解析的主体名称字符串(仅对 krb5 GSSAPI 机制有效)。

选项值类型

int

选项值单位

0, 1, 2

默认值

0 (ZMQ_GSSAPI_NT_HOSTBASED)

适用套接字类型

所有套接字类型,使用 TCP 或 IPC 传输时。

ZMQ_GSSAPI_PRINCIPAL_NAMETYPE:设置主体的名称类型

设置 GSSAPI 主体的名称类型。值为 'ZMQ_GSSAPI_NT_HOSTBASED' (0) 意味着使用 'ZMQ_GSSAPI_PRINCIPAL' 指定的名称被解释为基于主机的名称。值为 'ZMQ_GSSAPI_NT_USER_NAME' (1) 意味着它被解释为本地用户名。值为 'ZMQ_GSSAPI_NT_KRB5_PRINCIPAL' (2) 意味着它被解释为未解析的主体名称字符串(仅对 krb5 GSSAPI 机制有效)。

选项值类型

int

选项值单位

0, 1, 2

默认值

0 (ZMQ_GSSAPI_NT_HOSTBASED)

适用套接字类型

所有套接字类型,使用 TCP 或 IPC 传输时。

ZMQ_HANDSHAKE_IVL:设置最大握手间隔

'ZMQ_HANDSHAKE_IVL' 选项将设置指定 'socket' 的最大握手间隔。握手是连接首次打开时发生的套接字配置信息(套接字类型、路由 ID、安全性)交换过程,仅适用于面向连接的传输。如果握手未在配置的时间内完成,连接将被关闭。值为 0 表示没有握手时间限制。

选项值类型

int

选项值单位

毫秒

默认值

30000

适用套接字类型

除 ZMQ_STREAM 外的所有套接字类型,仅适用于面向连接的传输。

ZMQ_HELLO_MSG:设置当新对等方连接时将发送的 hello 消息

设置后,当建立或接受新连接时,套接字将自动发送 hello 消息。您可以在 DEALER、ROUTER、CLIENT、SERVER 和 PEER 套接字上设置此选项。与 ZMQ_HEARTBEAT_IVL 结合使用非常强大并简化协议,因为现在心跳和发送 hello 消息可以从协议中排除,由 zeromq 处理。

选项值类型

二进制数据

选项值单位

不适用

默认值

NULL

适用套接字类型

ZMQ_ROUTER, ZMQ_DEALER, ZMQ_CLIENT, ZMQ_SERVER 和 ZMQ_PEER

ZMQ_HEARTBEAT_IVL:设置发送 ZMTP 心跳的间隔

'ZMQ_HEARTBEAT_IVL' 选项将设置指定 'socket' 发送 ZMTP 心跳的间隔。如果设置了此选项且值大于 0,则每隔 'ZMQ_HEARTBEAT_IVL' 毫秒将发送一个 'PING' ZMTP 命令。

选项值类型

int

选项值单位

毫秒

默认值

0

适用套接字类型

所有套接字类型,使用面向连接的传输时。

ZMQ_HEARTBEAT_TIMEOUT:设置 ZMTP 心跳的超时时间

'ZMQ_HEARTBEAT_TIMEOUT' 选项将设置在发送 'PING' ZMTP 命令后且未接收到任何流量时,连接超时前等待的时间。此选项仅在同时设置了 'ZMQ_HEARTBEAT_IVL' 且值大于 0 时有效。如果在发送 'PING' 命令后没有收到任何流量,连接将超时,但收到的流量不必是 'PONG' 命令 - 任何收到的流量都会取消超时。

选项值类型

int

选项值单位

毫秒

默认值

通常为 0,如果 ZMQ_HEARTBEAT_IVL 已设置则为其值。

适用套接字类型

所有套接字类型,使用面向连接的传输时。

ZMQ_HEARTBEAT_TTL:设置 ZMTP 心跳的 TTL 值

'ZMQ_HEARTBEAT_TTL' 选项将设置远程对等方对 ZMTP 心跳的超时时间。如果此选项大于 0,则如果远程端在 TTL 周期内未收到任何更多流量,连接将超时。如果未设置 'ZMQ_HEARTBEAT_IVL' 或其值为 0,则此选项无效。在内部,此值将被向下舍入到最接近的十分之一秒,任何小于 100 的值将无效。

选项值类型

int

选项值单位

毫秒

默认值

0

最大值

6553599 (即 2^16-1 个十分之一秒)

适用套接字类型

所有套接字类型,使用面向连接的传输时。

ZMQ_IDENTITY:设置套接字身份

此选项名称现已弃用。请改用 ZMQ_ROUTING_ID。ZMQ_IDENTITY 暂时仍作为别名。

ZMQ_IMMEDIATE:仅向已完成的连接排队消息

默认情况下,即使连接尚未完成,队列也会在传出连接上填满。这可能导致使用轮询路由(REQ、PUSH、DEALER)的套接字上出现“丢失”消息。如果此选项设置为 1,消息将仅排队到已完成的连接。如果没有其他连接,这将导致套接字阻塞,但会防止队列在等待连接的管道上填满。

选项值类型

int

选项值单位

布尔值

默认值

0 (假)

适用套接字类型

所有套接字类型,仅适用于面向连接的传输。

ZMQ_INVERT_MATCHING:反转消息过滤

当设置为 1 时,反转 PUB-SUB 套接字的过滤行为。

在 'PUB' 和 'XPUB' 套接字上,这会导致消息发送到所有已连接的套接字,但那些订阅了与消息匹配的前缀的套接字“除外”。在 'SUB' 套接字上,这会导致用户仅接收不匹配套接字任何订阅的传入消息。

无论何时在 'PUB' 套接字上将 'ZMQ_INVERT_MATCHING' 设置为 1,所有连接到它的 'SUB' 套接字也必须将此选项设置为 1。否则,'SUB' 套接字将拒绝 'PUB' 套接字发送给它们的任何内容。'XSUB' 套接字无需执行此操作,因为它们不过滤传入消息。

选项值类型

int

选项值单位

0,1

默认值

0

适用套接字类型

ZMQ_PUB, ZMQ_XPUB, ZMQ_SUB

ZMQ_IPV6:在套接字上启用 IPv6

设置套接字的 IPv6 选项。值为 1 意味着套接字上启用了 IPv6,而 0 意味着套接字将仅使用 IPv4。启用 IPv6 后,套接字将连接到 IPv4 和 IPv6 主机,或接受来自它们的数据包。

选项值类型

int

选项值单位

布尔值

默认值

0 (假)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_LINGER:设置套接字关闭时的逗留期

‘ZMQ_LINGER' 选项将设置指定 'socket' 的逗留期。逗留期决定了套接字通过 zmq_disconnect 断开连接或通过 zmq_close 关闭后,尚未发送到对等方的待处理消息在内存中逗留的时间,并进一步影响使用 zmq_ctx_term 终止套接字 context 的行为。以下概述了不同的行为:

  • 值 '-1' 指定无限逗留期。调用 zmq_disconnect()zmq_close() 后,待处理消息不会被丢弃;尝试使用 zmq_ctx_term() 终止套接字的 context 将阻塞,直到所有待处理消息都已发送到对等方。

  • 值 '0' 指定没有逗留期。调用 zmq_disconnect()zmq_close() 后,待处理消息将立即被丢弃。

  • 正值指定逗留期的上限,单位为毫秒。调用 zmq_disconnect()zmq_close() 后,待处理消息不会被丢弃;尝试使用 zmq_ctx_term() 终止套接字的 context 将阻塞,直到所有待处理消息都已发送到对等方,或者逗留期到期,在此之后任何待处理消息都将被丢弃。

选项值类型

int

选项值单位

毫秒

默认值

-1 (无限)

适用套接字类型

所有套接字类型

ZMQ_MAXMSGSIZE:最大可接受的入站消息大小

限制入站消息的大小。如果对等方发送的消息大于 ZMQ_MAXMSGSIZE,它将被断开连接。值 -1 表示“无限制”。

选项值类型

int64_t

选项值单位

字节

默认值

-1

适用套接字类型

所有套接字类型

ZMQ_METADATA:向套接字添加应用程序元数据属性

ZMQ_METADATA 选项将向指定的 socket 添加应用程序元数据,元数据在连接建立期间与对等方交换。元数据属性被指定为一个字符串,以冒号分隔,以元数据 property 开头,后跟元数据值,例如 "X-key:value"。Property 名称最多限制为 255 个字符,并且必须以 "X-" 为前缀。通过多次执行 zmq_setsockopt() 可以向套接字添加多个应用程序元数据属性。由于参数是空终止字符串,因此在添加二进制数据之前必须对其进行编码,例如使用 Z85 (zmq_z85_encode)。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型

ZMQ_MULTICAST_HOPS:多播数据包的最大网络跳数

设置从此套接字发送的每个多播数据包中的生存时间(time-to-live)字段。默认值为 1,表示多播数据包不会离开本地网络。

选项值类型

int

选项值单位

网络跳数

默认值

1

适用套接字类型

所有套接字类型,使用多播传输时。

ZMQ_MULTICAST_MAXTPDU:多播数据包的最大传输数据单元大小

设置用于出站多播数据包的最大传输数据单元大小。

此值必须设置为小于或等于需要多播接收的所有网络路径的最小最大传输单元 (MTU)。

选项值类型

int

选项值单位

字节

默认值

1500

适用套接字类型

所有套接字类型,使用多播传输时。

ZMQ_PLAIN_PASSWORD:设置 PLAIN 安全密码

设置通过 TCP 或 IPC 进行的传出连接的密码。如果您将其设置为非空值,则用于连接的安全机制将是 PLAIN,请参见 zmq_plain。如果您将其设置为 NULL 值,则用于连接的安全机制将是 NULL,请参见 zmq_null

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_PLAIN_SERVER:设置 PLAIN 服务器角色

定义套接字是否充当 PLAIN 安全服务器,请参见 zmq_plain。值为 '1' 意味着套接字将充当 PLAIN 服务器。值为 '0' 意味着套接字将不充当 PLAIN 服务器,其安全角色将取决于其他选项设置。将其设置为 '0' 将把套接字安全重置为 NULL。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_PLAIN_USERNAME:设置 PLAIN 安全用户名

设置通过 TCP 或 IPC 进行的传出连接的用户名。如果您将其设置为非空值,则用于连接的安全机制将是 PLAIN,请参见 zmq_plain。如果您将其设置为 NULL 值,则用于连接的安全机制将是 NULL,请参见 zmq_null

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_USE_FD:设置预分配的套接字文件描述符

在套接字上调用 zmq_bind 之前将其设置为正整数值时,套接字将使用对应的文件描述符进行 TCP 或 IPC 连接,而不是分配新的文件描述符。对于编写 systemd 套接字激活服务非常有用。如果设置为 -1(默认),将分配一个新的文件描述符(默认行为)。

注意
如果在调用 zmq_bind 后设置,此选项将无效。注意:传递的文件描述符之前必须已通过“bind”和“listen”系统调用处理过。此外,通常通过 zmq_setsockopt 设置的套接字选项(如 TCP 缓冲区长度、IP_TOS 或 SO_REUSEADDR)必须由调用方事先设置,因为它们必须在套接字绑定之前设置。
选项值类型

int

选项值单位

文件描述符

默认值

-1

适用套接字类型

所有绑定的套接字,使用 IPC 或 TCP 传输时。

ZMQ_PRIORITY:设置套接字的优先级

设置此套接字上将发送的所有数据包的协议定义优先级,如果操作系统支持。在 Linux 中,大于 6 的值需要管理员权限 (CAP_NET_ADMIN)。

选项值类型

int

选项值单位

>0

默认值

0

适用套接字类型

所有套接字类型,仅适用于面向连接的传输。

ZMQ_PROBE_ROUTER:引导连接到 ROUTER 套接字

当设置为 1 时,当建立或接受新连接时,套接字将自动发送一个空消息。您可以在连接到 ROUTER 套接字的 REQ、DEALER 或 ROUTER 套接字上设置此选项。应用程序必须过滤此类空消息。ZMQ_PROBE_ROUTER 选项实际上为 ROUTER 应用程序提供了一个信号新对等方到达的事件。

注意
不要在与任何其他套接字类型通信的套接字上设置此选项:结果是未定义的。
选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_ROUTER, ZMQ_DEALER, ZMQ_REQ

ZMQ_RATE:设置多播数据速率

‘ZMQ_RATE' 选项将设置使用指定 'socket' 的多播传输(如 zmq_pgm)的最大发送或接收数据速率。

选项值类型

int

选项值单位

千比特每秒

默认值

100

适用套接字类型

所有套接字类型,使用多播传输时。

ZMQ_RCVBUF:设置内核接收缓冲区大小

‘ZMQ_RCVBUF' 选项将指定 'socket' 的底层内核接收缓冲区大小设置为指定字节数。值为 -1 表示保持操作系统默认值不变。有关详细信息,请参阅操作系统关于 'SO_RCVBUF' 套接字选项的文档。

选项值类型

int

选项值单位

字节

默认值

-1

适用套接字类型

所有套接字类型

ZMQ_RCVHWM:设置入站消息的高水位线

‘ZMQ_RCVHWM' 选项将设置指定 'socket' 的入站消息高水位线。高水位线是 0MQ 为指定 'socket' 正在通信的任何单个对等方在内存中排队的最大未完成消息数的硬限制。值为零表示无限制。

如果达到此限制,套接字将进入异常状态,并且根据套接字类型,0MQ 将采取适当的行动,例如阻塞或丢弃已发送的消息。有关每种套接字类型采取的确切行动的详细信息,请参阅 zmq_socket 中的各个套接字描述。

注意
0MQ 不保证套接字能够排队与 ZMQ_RCVHWM 一样多的消息,实际限制可能更低或更高,具体取决于套接字传输。一个值得注意的示例是使用 TCP 传输的套接字;请参见 zmq_tcp
选项值类型

int

选项值单位

消息数

默认值

1000

适用套接字类型

所有套接字类型

ZMQ_RCVTIMEO:recv 操作返回 EAGAIN 前的最大时间

设置套接字上接收操作的超时时间。如果值为 0zmq_recv(3) 将立即返回,如果没有要接收的消息,则返回 EAGAIN 错误。如果值为 -1,它将阻塞直到消息可用。对于所有其他值,它将等待该时间长度的消息,然后返回 EAGAIN 错误。

选项值类型

int

选项值单位

毫秒

默认值

-1 (无限)

适用套接字类型

所有套接字类型

ZMQ_RECONNECT_IVL:设置重连间隔

‘ZMQ_RECONNECT_IVL' 选项将设置指定 'socket' 的初始重连间隔。重连间隔是 0MQ 在使用面向连接的传输时,尝试重连断开的对等方之间等待的时间段。值 -1 意味着不重连。

注意
0MQ 可能会将重连间隔随机化,以防止在每个套接字具有大量对等方的拓扑中出现重连风暴。
选项值类型

int

选项值单位

毫秒

默认值

100

适用套接字类型

所有套接字类型,仅适用于面向连接的传输。

ZMQ_RECONNECT_IVL_MAX:设置最大重连间隔

‘ZMQ_RECONNECT_IVL_MAX' 选项将设置指定 'socket' 的最大重连间隔。0MQ 在重连尝试之间最多等待配置的间隔。间隔会随着每次尝试呈指数级增长(即翻倍),直到达到 ZMQ_RECONNECT_IVL_MAX。默认值意味着重连间隔仅基于 ZMQ_RECONNECT_IVL,不执行指数退避。

注意
值必须大于或等于 ZMQ_RECONNECT_IVL,否则将被忽略。
选项值类型

int

选项值单位

毫秒

默认值

0 (将使用 ZMQ_RECONNECT_IVL 的值)

适用套接字类型

所有套接字类型,仅适用于面向连接的传输。

ZMQ_RECONNECT_STOP:设置重连停止的条件

‘ZMQ_RECONNECT_STOP' 选项将设置自动重连停止的条件。当进程绑定到通配符端口(操作系统提供临时端口)时,这很有用。

‘ZMQ_RECONNECT_STOP_CONN_REFUSED' 选项将在 0MQ 从 connect 接收到 ECONNREFUSED 返回码时停止重连。这表明没有代码绑定到指定的端点。

‘ZMQ_RECONNECT_STOP_HANDSHAKE_FAILED' 选项将在 0MQ 握手失败时停止重连。这可用于检测和/或阻止对非 0MQ 套接字的错误连接尝试。请注意,在指定此选项时,您可能还希望设置 ZMQ_HANDSHAKE_IVL —— 默认握手间隔为 30000(30 秒),这通常太长。

‘ZMQ_RECONNECT_STOP_AFTER_DISCONNECT' 选项将在调用 zmq_disconnect() 后停止重连。当用户请求失败(服务器未就绪)时,这可能很有用,因为在用户主动断开连接后,套接字无需继续重连。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

0, ZMQ_RECONNECT_STOP_CONN_REFUSED, ZMQ_RECONNECT_STOP_HANDSHAKE_FAILED, ZMQ_RECONNECT_STOP_CONN_REFUSED | ZMQ_RECONNECT_STOP_HANDSHAKE_FAILED

默认值

0

适用套接字类型

所有套接字类型,仅适用于面向连接的传输(ZMQ_HANDSHAKE_IVL 不适用于 ZMQ_STREAM 套接字)。

ZMQ_RECOVERY_IVL:设置多播恢复间隔

‘ZMQ_RECOVERY_IVL' 选项将设置使用指定 'socket' 的多播传输的恢复间隔。恢复间隔决定了接收方在多播组中可以缺席的最大时间(以毫秒为单位),超过此时间将发生不可恢复的数据丢失。

注意
设置较大的恢复间隔时请谨慎,因为恢复所需的数据将保存在内存中。例如,以 1Gbps 数据速率计算,1 分钟的恢复间隔需要 7GB 的内存缓冲区。
选项值类型

int

选项值单位

毫秒

默认值

10000

适用套接字类型

所有套接字类型,使用多播传输时。

ZMQ_REQ_CORRELATE:将回复与请求匹配

REQ 套接字的默认行为是依赖消息顺序来匹配请求和响应,这通常就足够了。当此选项设置为 1 时,REQ 套接字将在传出消息前面添加一个包含请求 ID 的额外帧。这意味着完整消息为(请求 ID,0,用户帧...)。REQ 套接字将丢弃所有不以此两个帧开头的所有传入消息。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_REQ

ZMQ_REQ_RELAXED:放宽请求和回复之间的严格交替

默认情况下,REQ 套接字不允许在收到前一个请求的回复之前使用 zmq_send(3) 发起新的请求。当设置为 1 时,允许发送另一条消息,并且如果存在以前的回复,它们将被丢弃。请求-回复状态机将被重置,并将新请求发送到下一个可用的对等方。

如果设置为 1,还应启用 ZMQ_REQ_CORRELATE 以确保请求和回复的正确匹配。否则,对已中止请求的延迟回复可能会被报告为对后续请求的回复。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_REQ

ZMQ_ROUTER_HANDOVER:处理 ROUTER 套接字上的重复客户端路由 ID

如果两个客户端在连接到 ROUTER 时使用相同的路由 ID,结果将取决于 ZMQ_ROUTER_HANDOVER 选项的设置。如果未设置(或设置为默认值零),ROUTER 套接字将拒绝尝试使用已使用路由 ID 连接的客户端。如果将此选项设置为 1,ROUTER 套接字将把连接移交给新客户端并断开现有客户端。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_ROUTER

ZMQ_ROUTER_MANDATORY:在 ROUTER 套接字上仅接受可路由消息

设置 ROUTER 套接字在遇到不可路由消息时的行为。值为 0 是默认值,并且当消息无法路由或达到对等方的 SNDHWM 时,将静默丢弃消息。值为 1 时,如果消息无法路由则返回 'EHOSTUNREACH' 错误码,或者如果达到 SNDHWM 且使用了 ZMQ_DONTWAIT 则返回 'EAGAIN' 错误码。如果没有 ZMQ_DONTWAIT,它将阻塞直到达到 SNDTIMEO 或发送队列中有空位。

当 ZMQ_ROUTER_MANDATORY 设置为 1 时,如果可以将一个或多个消息发送到至少一个对等方,将生成 'ZMQ_POLLOUT' 事件。如果 ZMQ_ROUTER_MANDATORY 设置为 0,套接字将在每次调用 'zmq_poll' 或 'zmq_poller_wait_all' 时生成 'ZMQ_POLLOUT' 事件。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_ROUTER

ZMQ_ROUTER_RAW:将 ROUTER 套接字切换到原始模式

当设置为 1 时,在 ROUTER 上设置原始模式。当 ROUTER 套接字处于原始模式并使用 tcp:// 传输时,它将读取和写入 TCP 数据而不使用 0MQ 帧。这使得 0MQ 应用程序可以与非 0MQ 应用程序通信。使用原始模式时,您不能设置显式身份,并且发送数据消息时将忽略 ZMQ_SNDMORE 标志。在原始模式下,您可以通过发送一个零长度消息(跟随路由 ID 帧)来关闭特定连接。

注意
此选项已弃用,请改用 ZMQ_STREAM 套接字。
选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_ROUTER

ZMQ_ROUTING_ID:设置套接字路由 ID

‘ZMQ_ROUTING_ID' 选项将设置指定 'socket' 在连接到 ROUTER 套接字时的路由 ID。

路由 ID 必须至少一个字节长,最多 255 字节长。以零字节开头的身份保留供 0MQ 基础设施使用。

如果两个客户端在连接到 ROUTER 时使用相同的路由 ID,结果将取决于 ZMQ_ROUTER_HANDOVER 选项的设置。如果未设置(或设置为默认值零),ROUTER 套接字将拒绝尝试使用已使用路由 ID 连接的客户端。如果将此选项设置为 1,ROUTER 套接字将把连接移交给新客户端并断开现有客户端。

选项值类型

二进制数据

选项值单位

不适用

默认值

NULL

适用套接字类型

ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER, ZMQ_DEALER。

ZMQ_SNDBUF:设置内核发送缓冲区大小

‘ZMQ_SNDBUF' 选项将指定 'socket' 的底层内核发送缓冲区大小设置为指定字节数。值为 -1 表示保持操作系统默认值不变。有关详细信息,请参阅操作系统关于 'SO_SNDBUF' 套接字选项的文档。

选项值类型

int

选项值单位

字节

默认值

-1

适用套接字类型

所有套接字类型

ZMQ_SNDHWM:设置出站消息的高水位线

‘ZMQ_SNDHWM' 选项将设置指定 'socket' 的出站消息高水位线。高水位线是 0MQ 为指定 'socket' 正在通信的任何单个对等方在内存中排队的最大未完成消息数的硬限制。值为零表示无限制。

如果达到此限制,套接字将进入异常状态,并且根据套接字类型,0MQ 将采取适当的行动,例如阻塞或丢弃已发送的消息。有关每种套接字类型采取的确切行动的详细信息,请参阅 zmq_socket 中的各个套接字描述。

注意
0MQ 不保证套接字能接受多达 ZMQ_SNDHWM 个消息,实际限制可能低至 90%,具体取决于套接字上的消息流。套接字甚至可能接受超过 ZMQ_SNDHWM 阈值的消息;一个值得注意的例子是使用 TCP 传输的套接字;详情请参阅 zmq_tcp
选项值类型

int

选项值单位

消息数

默认值

1000

适用套接字类型

所有套接字类型

ZMQ_SNDTIMEO:发送操作返回 EAGAIN 之前的最长时间

设置套接字上发送操作的超时时间。如果值为 0,则如果无法发送消息,zmq_send(3) 将立即返回 EAGAIN 错误。如果值为 -1,它将阻塞直到消息发送成功。对于所有其他值,它将在返回 EAGAIN 错误之前尝试发送消息指定的时间长度。

选项值类型

int

选项值单位

毫秒

默认值

-1 (无限)

适用套接字类型

所有套接字类型

ZMQ_SOCKS_PROXY:设置 SOCKS5 代理地址

设置套接字用于 TCP 连接的 SOCKS5 代理地址。支持的身份验证方法有:无身份验证或与 ZMQ_SOCKS_USERNAME 一起设置时的基本身份验证。如果端点是域名而不是地址,则它们不应被解析,并且应在客户端连接请求消息中原封不动地转发到 SOCKS 代理服务(地址类型 0x03 域名)。

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_SOCKS_USERNAME:设置 SOCKS 用户名并选择基本身份验证

设置连接到 SOCKS5 代理进行身份验证的用户名。如果您将其设置为非空且非空字符串,则用于 SOCKS5 连接的身份验证方法将是基本身份验证。在这种情况下,请使用 ZMQ_SOCKS_PASSWORD 选项来设置密码。如果您将其设置为 null 值或空值,则身份验证方法将是无身份验证,这是默认设置。

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_SOCKS_PASSWORD:设置 SOCKS 基本身份验证密码

设置用于向 SOCKS5 代理服务器进行身份验证的密码。此选项仅在通过 ZMQ_SOCKS_USERNAME 选项将 SOCKS5 身份验证方法设置为基本身份验证时使用。将其设置为 null 值(默认)等同于空密码字符串。

选项值类型

字符字符串

选项值单位

不适用

默认值

未设置

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_STREAM_NOTIFY:发送连接和断开连接通知

在 STREAM 套接字上启用连接和断开连接通知,设置为 1 时生效。启用通知后,当对等方连接或断开连接时,套接字会传递一个零长度的消息。

选项值类型

int

选项值单位

0, 1

默认值

1

适用套接字类型

ZMQ_STREAM

ZMQ_SUBSCRIBE:建立消息过滤器

'ZMQ_SUBSCRIBE' 选项应在 'ZMQ_SUB' 套接字上建立新的消息过滤器。新创建的 'ZMQ_SUB' 套接字将过滤掉所有传入消息,因此您应该调用此选项来建立初始消息过滤器。

长度为零的空 'option_value' 将订阅所有传入消息。非空的 'option_value' 将订阅所有以指定前缀开头的消息。可以向单个 'ZMQ_SUB' 套接字附加多个过滤器,在这种情况下,如果消息至少匹配一个过滤器,则将被接受。

选项值类型

二进制数据

选项值单位

不适用

默认值

不适用

适用套接字类型

ZMQ_SUB

ZMQ_TCP_KEEPALIVE:覆盖 SO_KEEPALIVE 套接字选项

覆盖 'SO_KEEPALIVE' 套接字选项(如果操作系统支持)。默认值 -1 表示跳过任何覆盖并使用操作系统默认设置。

选项值类型

int

选项值单位

-1,0,1

默认值

-1(使用操作系统默认设置)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_TCP_KEEPALIVE_CNT:覆盖 TCP_KEEPCNT 套接字选项

覆盖 'TCP_KEEPCNT' 套接字选项(如果操作系统支持)。默认值 -1 表示跳过任何覆盖并使用操作系统默认设置。

选项值类型

int

选项值单位

-1,>0

默认值

-1(使用操作系统默认设置)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_TCP_KEEPALIVE_IDLE:覆盖 TCP_KEEPIDLE(或某些操作系统上的 TCP_KEEPALIVE)

覆盖 'TCP_KEEPIDLE'(或某些操作系统上的 'TCP_KEEPALIVE')套接字选项(如果操作系统支持)。默认值 -1 表示跳过任何覆盖并使用操作系统默认设置。

选项值类型

int

选项值单位

-1,>0

默认值

-1(使用操作系统默认设置)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_TCP_KEEPALIVE_INTVL:覆盖 TCP_KEEPINTVL 套接字选项

覆盖 'TCP_KEEPINTVL' 套接字选项(如果操作系统支持)。默认值 -1 表示跳过任何覆盖并使用操作系统默认设置。

选项值类型

int

选项值单位

-1,>0

默认值

-1(使用操作系统默认设置)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_TCP_MAXRT:设置 TCP 最大重传超时

在支持的操作系统上,设置未确认的 TCP 重传超时的时长。系统通常会按照指数退避策略尝试多次 TCP 重传。这意味着在网络中断后,可能需要很长时间才能重新建立会话。设置此选项允许在较短的时间间隔内发生超时。

选项值类型

int

选项值单位

毫秒

默认值

0(使用操作系统默认设置)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_TOS:设置套接字的 Type-of-Service

设置 IP 头部的 ToS 字段(差分服务 (DS) 和显式拥塞通知 (ECN) 字段)。ToS 字段通常用于指定数据包的优先级。此选项的可用性取决于检查 ToS 字段并为低延迟、高吞吐量、高可靠性服务等提供路径的中间网络设备。

选项值类型

int

选项值单位

>0

默认值

0

适用套接字类型

所有套接字类型,仅适用于面向连接的传输。

ZMQ_UNSUBSCRIBE:移除消息过滤器

'ZMQ_UNSUBSCRIBE' 选项应移除 'ZMQ_SUB' 套接字上现有的消息过滤器。指定的过滤器必须与先前使用 'ZMQ_SUBSCRIBE' 选项建立的现有过滤器匹配。如果套接字附加了同一过滤器的多个实例,则 'ZMQ_UNSUBSCRIBE' 选项只应移除一个实例,其余实例保持原样并继续功能。

选项值类型

二进制数据

选项值单位

不适用

默认值

不适用

适用套接字类型

ZMQ_SUB

ZMQ_XPUB_VERBOSE:在 XPUB 套接字上传递重复的订阅消息

设置 'XPUB' 套接字在新重复订阅时的行为。如果启用,套接字会将所有订阅消息传递给调用方。如果禁用,则只传递每个过滤器的第一个订阅。默认值为 0(禁用)。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_XPUB

ZMQ_XPUB_VERBOSER:在 XPUB 套接字上传递重复的订阅和取消订阅消息

设置 'XPUB' 套接字在新重复订阅和取消订阅时的行为。如果启用,套接字会将所有订阅和取消订阅消息传递给调用方。如果禁用,则只传递每个过滤器的第一个订阅和每个过滤器的最后一个取消订阅。默认值为 0(禁用)。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_XPUB

ZMQ_XPUB_MANUAL:将订阅处理更改为手动

设置 'XPUB' 套接字的订阅处理模式为手动/自动。值为 '0' 是默认设置,订阅请求将自动处理。值为 '1' 将把订阅请求处理更改为手动模式,手动模式下订阅请求不会添加到订阅列表。要添加订阅,用户需要在 XPUB 套接字上调用带有 ZMQ_SUBSCRIBE 的 setsockopt。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_XPUB

ZMQ_XPUB_MANUAL_LAST_VALUE:将订阅处理更改为手动

此选项类似于 ZMQ_XPUB_MANUAL。不同之处在于 ZMQ_XPUB_MANUAL_LAST_VALUE 会改变 'XPUB' 套接字的行为,使其在接收到订阅并在 'XPUB' 套接字上调用带有 ZMQ_SUBSCRIBE 的 setsockopt 后,将第一条消息发送给最后一个订阅者。这在使用最新值缓存 (LVC) 时可以防止重复消息。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_XPUB

ZMQ_XPUB_NODROP:如果达到 SENDHWM 则不静默丢弃消息

设置 'XPUB' 套接字的行为,如果达到 SENDHWM 且消息无法发送,则返回 EAGAIN 错误。

值为 0 是默认设置,当对等方的 SNDHWM 达到时会静默丢弃消息。值为 1 则在达到 SNDHWM 且使用了 ZMQ_DONTWAIT 时返回 'EAGAIN' 错误码。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_XPUB, ZMQ_PUB

ZMQ_XPUB_WELCOME_MSG:设置订阅者连接时将收到的欢迎消息

设置订阅者连接时将收到的欢迎消息。订阅者必须在连接之前订阅欢迎消息。重新连接时也会发送欢迎消息。为了使欢迎消息正常工作,用户必须轮询 XPUB 套接字上收到的订阅消息并进行处理。

使用 NULL 且长度为零来禁用欢迎消息。

选项值类型

二进制数据

选项值单位

不适用

默认值

NULL

适用套接字类型

ZMQ_XPUB

ZMQ_XSUB_VERBOSE_UNSUBSCRIBE:在 XSUB 套接字上传递重复的取消订阅消息

设置 'XSUB' 套接字在重复取消订阅时的行为。如果启用,套接字会将所有取消订阅消息传递给调用方。如果禁用,则只传递每个过滤器的最后一个取消订阅。默认值为 0(禁用)。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

ZMQ_XSUB

ZMQ_ONLY_FIRST_SUBSCRIBE:只处理多部分消息中的第一个订阅/取消订阅

如果设置,则只将多部分消息的第一部分作为订阅/取消订阅消息处理。其余部分无论消息内容如何,都作为用户数据转发。

如果未设置(默认),多部分消息中的订阅/取消订阅消息将按其数量和顺序进行处理。

选项值类型

int

选项值单位

布尔值

默认值

0 (假)

适用套接字类型

ZMQ_XSUB, ZMQ_XPUB

ZMQ_ZAP_DOMAIN:设置 RFC 27 身份验证域

设置 ZAP (ZMQ RFC 27) 身份验证的域。必须指定 ZAP 域才能启用身份验证。当 ZAP 域为空(默认值)时,ZAP 身份验证被禁用。这与 libzmq 的早期版本不兼容,因此可以通过 ZMQ_ZAP_ENFORCE_DOMAIN 来控制,目前默认是禁用的。有关更多详细信息,请参阅 https://rfc.zeromq.cn/spec:27

选项值类型

字符字符串

选项值单位

不适用

默认值

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_ZAP_ENFORCE_DOMAIN:设置 ZAP 域处理以严格遵守 RFC

ZAP (ZMQ RFC 27) 身份验证协议规定必须始终设置域。早期版本的 libzmq 没有遵循该规范,允许设置空域。此选项可用于启用或禁用更严格的、向后不兼容的行为。目前默认是禁用的,但在未来版本中将默认启用。

选项值类型

int

选项值单位

0, 1

默认值

0

适用套接字类型

所有,使用 ZAP 时

ZMQ_TCP_ACCEPT_FILTER:指定过滤器以允许新的 TCP 连接

指定任意数量的过滤器,这些过滤器将应用于监听套接字上的每个新的 TCP 传输连接。如果没有应用过滤器,则 TCP 传输允许来自任何 IP 地址的连接。如果至少应用了一个过滤器,则新的连接源 IP 必须匹配。要清除所有过滤器,请调用 zmq_setsockopt(socket, ZMQ_TCP_ACCEPT_FILTER, NULL, 0)。过滤器是一个以 null 结尾的字符串,包含 ipv6 或 ipv4 CIDR。

注意
此选项已弃用,请使用 ZAP API 进行身份验证以及 IP 地址允许/阻止。
选项值类型

二进制数据

选项值单位

不适用

默认值

无过滤器(允许所有)

适用套接字类型

所有监听套接字,使用 TCP 传输时。

ZMQ_IPC_FILTER_GID:指定组 ID 过滤器以允许新的 IPC 连接

指定任意数量的过滤器,这些过滤器将应用于监听套接字上的每个新的 IPC 传输连接。如果没有应用 IPC 过滤器,则 IPC 传输允许来自任何进程的连接。如果至少应用了一个 UID、GID 或 PID 过滤器,则新的连接凭据必须匹配。要清除所有 GID 过滤器,请调用 zmq_setsockopt(socket, ZMQ_IPC_FILTER_GID, NULL, 0)。

注意
GID 过滤器仅在支持 SO_PEERCRED 或 LOCAL_PEERCRED 套接字选项的平台上可用(目前仅限 Linux 和更高版本的 OS X)。
注意
此选项已弃用,请使用 ZAP API 进行身份验证以及 IPC 允许/阻止。
选项值类型

gid_t

选项值单位

不适用

默认值

无过滤器(允许所有)

适用套接字类型

所有监听套接字,使用 IPC 传输时。

ZMQ_IPC_FILTER_PID:指定进程 ID 过滤器以允许新的 IPC 连接

指定任意数量的过滤器,这些过滤器将应用于监听套接字上的每个新的 IPC 传输连接。如果没有应用 IPC 过滤器,则 IPC 传输允许来自任何进程的连接。如果至少应用了一个 UID、GID 或 PID 过滤器,则新的连接凭据必须匹配。要清除所有 PID 过滤器,请调用 zmq_setsockopt(socket, ZMQ_IPC_FILTER_PID, NULL, 0)。

注意
PID 过滤器仅在支持 SO_PEERCRED 套接字选项的平台上可用(目前仅限 Linux)。
注意
此选项已弃用,请使用 ZAP API 进行身份验证以及 IPC 允许/阻止。
选项值类型

pid_t

选项值单位

不适用

默认值

无过滤器(允许所有)

适用套接字类型

所有监听套接字,使用 IPC 传输时。

ZMQ_IPC_FILTER_UID:指定用户 ID 过滤器以允许新的 IPC 连接

指定任意数量的过滤器,这些过滤器将应用于监听套接字上的每个新的 IPC 传输连接。如果没有应用 IPC 过滤器,则 IPC 传输允许来自任何进程的连接。如果至少应用了一个 UID、GID 或 PID 过滤器,则新的连接凭据必须匹配。要清除所有 UID 过滤器,请调用 zmq_setsockopt(socket, ZMQ_IPC_FILTER_UID, NULL, 0)。

注意
UID 过滤器仅在支持 SO_PEERCRED 或 LOCAL_PEERCRED 套接字选项的平台上可用(目前仅限 Linux 和更高版本的 OS X)。
注意
此选项已弃用,请使用 ZAP API 进行身份验证以及 IPC 允许/阻止。
选项值类型

uid_t

选项值单位

不适用

默认值

无过滤器(允许所有)

适用套接字类型

所有监听套接字,使用 IPC 传输时。

ZMQ_IPV4ONLY:在套接字上仅使用 IPv4

为套接字设置仅 IPv4 选项。此选项已弃用。请使用 ZMQ_IPV6 选项。

选项值类型

int

选项值单位

布尔值

默认值

1(真)

适用套接字类型

所有套接字类型,使用 TCP 传输时。

ZMQ_VMCI_BUFFER_SIZE:设置 VMCI 套接字的缓冲区大小

ZMQ_VMCI_BUFFER_SIZE 选项应设置套接字底层缓冲区的大小。用于连接建立之前的协商过程。

选项值类型

uint64_t

选项值单位

字节

默认值

65546

适用套接字类型

所有,使用 VMCI 传输时

ZMQ_VMCI_BUFFER_MIN_SIZE:设置 VMCI 套接字的最小缓冲区大小

ZMQ_VMCI_BUFFER_MIN_SIZE 选项应设置套接字底层缓冲区的最小大小。用于连接建立之前的协商过程。

选项值类型

uint64_t

选项值单位

字节

默认值

128

适用套接字类型

所有,使用 VMCI 传输时

ZMQ_VMCI_BUFFER_MAX_SIZE:设置 VMCI 套接字的最大缓冲区大小

ZMQ_VMCI_BUFFER_MAX_SIZE 选项应设置套接字底层缓冲区的最大大小。用于连接建立之前的协商过程。

选项值类型

uint64_t

选项值单位

字节

默认值

262144

适用套接字类型

所有,使用 VMCI 传输时

ZMQ_VMCI_CONNECT_TIMEOUT:设置 VMCI 套接字的连接超时

ZMQ_VMCI_CONNECT_TIMEOUT 选项应设置套接字的连接超时。

选项值类型

int

选项值单位

毫秒

默认值

-1

适用套接字类型

所有,使用 VMCI 传输时

ZMQ_MULTICAST_LOOP:控制多播本地回环

对于多播 UDP 发送套接字,此选项设置发送的数据是否应在本地监听套接字上回环。

选项值类型

int

选项值单位

0, 1

默认值

1

适用套接字类型

ZMQ_RADIO,使用 UDP 多播传输时

ZMQ_ROUTER_NOTIFY:发送连接和断开连接通知

在 ROUTER 套接字上启用连接和断开连接通知。启用后,当对等方连接或断开连接时,套接字会传递一个零长度消息(第一个帧为路由 ID)。可以通过对标志值进行 OR 运算来通知对等方的两个事件。此选项仅适用于面向流的传输(tcp, ipc)。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

0, ZMQ_NOTIFY_CONNECT, ZMQ_NOTIFY_DISCONNECT, ZMQ_NOTIFY_CONNECT | ZMQ_NOTIFY_DISCONNECT

默认值

0

适用套接字类型

ZMQ_ROUTER

ZMQ_IN_BATCH_SIZE:最大接收批量大小

设置单个 'recv' 系统调用中可以接收的最大消息数量。警告:此选项几乎不应更改。选择默认值是为了在延迟和吞吐量之间提供最佳权衡。在绝大多数情况下,更改此选项将导致最差的结果,甚至直接破坏功能。

不能为零。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

消息数

默认值

8192

适用套接字类型

所有,使用 TCP、IPC、PGM 或 NORM 传输时。

ZMQ_OUT_BATCH_SIZE:最大发送批量大小

设置单个 'send' 系统调用中可以发送的最大消息数量。警告:此选项几乎不应更改。选择默认值是为了在延迟和吞吐量之间提供最佳权衡。在绝大多数情况下,更改此选项将导致最差的结果,甚至直接破坏功能。

不能为零。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

消息数

默认值

8192

适用套接字类型

所有,使用 TCP、IPC、PGM 或 NORM 传输时。

ZMQ_NORM_MODE:NORM 发送模式

设置 NORM 发送模式以控制 NORM 传输的操作。NORM 支持固定速率操作(0='ZMQ_NORM_FIXED')、拥塞控制模式(1='ZMQ_NORM_CC')、容忍丢包的拥塞控制(2='ZMQ_NORM_CCL')、启用显式拥塞通知 (ECN) 的拥塞控制(3='ZMQ_NORM_CCE')和仅 ECN 的拥塞控制(4='ZMQ_NORM_CCE_ECNONLY')。默认值是 TCP 友好的拥塞控制模式。固定速率模式(使用 'ZMQ_RATE' 设置的数据速率)提供更好的性能,但必须小心防止数据丢失。ECN 模式会在给定的 'ZMQ_TOS' 中设置一个 ECN Capable Transport 位,如果它尚未设置。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

0, 1, 2, 3, 4

默认值

1 ('ZMQ_NORM_CC')

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_UNICAST_NACK:设置 NORM 单播 NACK 模式

如果设置,NORM 接收方将使用单播而不是多播将否定确认 (NACK) 发送回发送方。指定单播地址的 NORM 传输端点默认启用此选项,但对于多播地址默认禁用。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

布尔值

默认值

0 (假)

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_BUFFER_SIZE:设置 NORM 缓冲区大小

设置 NORM 传输发送方、接收方和流的 NORM 缓冲区大小。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

千字节

默认值

2048

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_SEGMENT_SIZE:设置 NORM 段大小

设置 NORM 发送方段大小,这是单个 NORM 消息的最大消息负载大小(ZMQ 消息可以跨多个 NORM 消息拆分)。理想情况下,考虑到额外的 NORM 消息头(最多 48 字节)后,此值应适应系统/网络最大传输单元 (MTU)。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

字节

默认值

1400

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_BLOCK_SIZE:设置 NORM 块大小

设置 NORM 发送方块大小,即 NORM FEC 编码块中的段数。NORM 修复操作发生在块边界。最大值为 255,但奇偶校验包 ('ZMQ_NORM_NUM_PARITY') 的值限制为 (255 - 'ZMQ_NORM_BLOCK_SIZE')。最小值为 ('ZMQ_NORM_NUM_PARITY' + 1)。如果提供了无效设置,则有效值可能会因 'ZMQ_NORM_NUM_PARITY' 和 'ZMQ_NORM_NUM_AUTOPARITY' 的设置而有所不同。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

>0, ⇐255

默认值

16

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_NUM_PARITY:设置 NORM 奇偶校验段的数量

设置发送方愿意为每个 FEC 编码块计算的最大 NORM 奇偶校验符号段数,用于修复丢失的数据。最大值为 255,但进一步限制为 (255 - 'ZMQ_NORM_BLOCK_SIZE')。最小值为 'ZMQ_NORM_NUM_AUTOPARITY'。如果提供了无效设置,则有效值可能会因 'ZMQ_NORM_NUM_AUTOPARITY' 的设置而有所不同。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

>0, <255

默认值

4

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_NUM_AUTOPARITY:设置主动 NORM 奇偶校验段的数量

设置发送方将在每个 FEC 编码块结束时主动发送的 NORM 奇偶校验符号段数。默认情况下,不会发送主动奇偶校验段;相反,奇偶校验段只会在响应修复请求 (NACK) 时发送。最大值为 255,但进一步限制为最大值 'ZMQ_NORM_NUM_PARITY'。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

>=0, <255

默认值

0

适用套接字类型

所有,使用 NORM 传输时。

ZMQ_NORM_PUSH:启用 NORM 推送模式

启用 NORM 流推送模式,这会改变发送方在将新数据入队时的行为。默认情况下,NORM 在等待旧数据传输和/或修复时将停止接受新消息。启用推送模式会丢弃最旧的数据(这些数据可能待修复或从未传输过),以便接受新数据。在需要快速交付新数据而不是可靠交付旧数据的情况下,这可能很有用。

注意
处于 DRAFT 状态,尚未在稳定版本中提供。
选项值类型

int

选项值单位

布尔值

默认值

0 (假)

适用套接字类型

所有,使用 NORM 传输时。

返回值

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

错误

EINVAL

请求的选项 option_name 未知,或请求的 option_lenoption_value 无效。

ETERM

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

ENOTSOCK

提供的 'socket' 无效。

EINTR

操作被信号传递中断。

示例

在 'ZMQ_SUB' 套接字上订阅消息
/* Subscribe to all messages */
rc = zmq_setsockopt (socket, ZMQ_SUBSCRIBE, "", 0);
assert (rc == 0);
/* Subscribe to messages prefixed with "ANIMALS.CATS" */
rc = zmq_setsockopt (socket, ZMQ_SUBSCRIBE, "ANIMALS.CATS", 12);
设置 I/O 线程亲和性
int64_t affinity;
/* Incoming connections on TCP port 5555 shall be handled by I/O thread 1 */
affinity = 1;
rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &affinity, sizeof (affinity));
assert (rc);
rc = zmq_bind (socket, "tcp://lo:5555");
assert (rc);
/* Incoming connections on TCP port 5556 shall be handled by I/O thread 2 */
affinity = 2;
rc = zmq_setsockopt (socket, ZMQ_AFFINITY, &affinity, sizeof (affinity));
assert (rc);
rc = zmq_bind (socket, "tcp://lo:5556");
assert (rc);

另请参阅

作者

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