zoukankan      html  css  js  c++  java
  • ZeroMQ接口函数之 :zmq_getsockopt – 获取ZMQ socket的属性

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html

    本文地址 :http://www.cnblogs.com/fengbohello/p/4474333.html

    翻译:郝峰波

    mail : fengbohello@qq.com


    ZeroMQ 官方地址http://api.zeromq.org/4-0:zmq-getsockopt

    zmq_getsockopt(3)           ØMQ Manual -ØMQ/4.0.6

    Name

    zmq_getsockopt – 获取ZMQ socket的属性

    Synopsis

    int zmq_getsockopt (void *socket, int option_name, void*option_value, size_t *option_len);

    Description

    zmq_getsockopt()函数会取回socket参数指定的socket上,option_name参数指定的属性的值,并且把这个值存储在option_value参数指定的存储空间中。option_len参数指定了option_value参数指定的存储空间的大小(以字节计算);在成功的情况下,zmq_getsockopt()函数会修改option_len参数指定的值,以确保在内存中存储的属性值的真是情况。

    以下的属性值可以通过zmq_getsockopt()函数返回。

    ZMQ_TYPE:返回socket的类型

    ZMQ_TYPE属性会返回socket参数指定的socket的类型。socket的类型是在创建的时候指定的,并且在之后不能修改。

    属性值的类型

    int

    属性值的单位

    N/A

    默认值

    N/A

    可以应用的socket类型

    所有类型

    ZMQ_RCVMORE:接下来是否会否更多消息帧

    如果刚刚接到的一帧消息后面还有更多的消息帧,那么ZMQ_RCVMORE属性会返回True(1)。如果后面没有剩余的帧了,那么会返回False(0)。请参考zmq_send(3)zmq_recv(3)函数来获取关于多帧消息的更多细节。

    属性值的类型

    int

    属性值的单位

    布尔

    默认值

    N/A

    可以应用的socket类型

    所有类型

    ZMQ_SNDHWM:返回向外发送消息的高水位

    ZMQ_SNDHWM属性会返回socket参数指定的socket的向外发送的消息的高水位标记。这个高水位是未解决的消息队列长度最大值的硬限制,对于socket参数指定的socket所连接的任何一个对端, ZMQ在内存中维护一个消息队列。这个属性值是0表示没有限制。

    如果到达了这个限制,这个socket会进入一种异常的状态,ZMQ会根据socket的类型而进行阻塞或者丢弃消息等的操作。参考zmq_socket(3)函数以获得每个类型的socket准确的行为。

    属性值的类型

    int

    属性值的单位

    消息

    默认值

    1000

    可以应用的socket类型

    所有类型

    ZMQ_RCVHWM:返回接收消息的高水位

    ZMQ_RCVHWM属性会返回socket参数指定的socket上接收消息的高水位。这个高水位是未解决的消息队列长度最大值的硬限制,对于socket参数指定的socket所连接的任何一个对端, ZMQ在内存中维护一个消息队列。这个属性值是0表示没有限制。

    如果到达了这个限制,这个socket会进入一种异常的状态,ZMQ会根据socket的类型而进行阻塞或者丢弃消息等的操作。参考zmq_socket(3)函数以获得每个类型的socket准确的行为。

    属性值的类型

    int

    属性值的单位

    消息

    默认值

    1000

    可以应用的socket类型

    所有类型

    ZMQ_AFFINITY:返回I/O线程关联

    ZMQ_AFFINITY属性会返回socket参数指定的socket上最新创建的链接的I/O关联。

    关联决定了这个socket相联系的context的线程池中的哪一个线程来接管新建立的连接。属性值是0表示没有关联,意味着任务会在线程池中的所有线程中公平的分配。对于非0值,最低位的一位(二进制位)对应线程1,次低位对应线程2,等等…例如,值是3表示接下来建立的连接会唯一的被线程1和2接管。

    也可以参考zmq_init(3)函数获取对指定的context的分配I/O线程数的细节。

    属性值的类型

    uint_64

    属性值的单位

    N/A(位图)

    默认值

    0

    可以应用的socket类型

    N/A

    ZMQ_IDENTITY:返回socket的身份

    ZMQ_IDENTITY属性会返回socket参数指定的socket的身份ID。身份ID只在请求/回复模式中使用。也就是说,可以在ROUTER类型耳朵socket上通过指定的身份ID把消息路由到这个对端上,而实现串联。

    身份ID至少需要1字节并且至多255字节长度。以二进制0开头的身份ID是ZMQ基础结果保留的。

    属性值的类型

    二进制数据

    属性值的单位

    N/A

    默认值

    NULL

    可以应用的socket类型

    ZMQ_REP,ZMQ_REQ,ZMQ_ROUTER,ZMQ_DEALER

    ZMQ_RATE:返回多路广播数据速率

    ZMQ_RATE选项返回使用socket指定的socket进行多路广播的时候发送或者接收数据的最大值。

    属性值的类型

    int

    属性值的单位

    Kb/s

    默认值

    100

    可以应用的socket类型

    当使用多路传输方式时,所有socket可用

    ZMQ_RECOVERY_IVL:获取多播时的恢复间隔

    ZMQ_RECOVERY_IVL属性会返回socket参数指定的socket多路广播传输模式时的恢复间隔。恢复时间决定了当一个广播组中不可恢复的消息在被丢弃前,一个接收者在一个广播组里面缺席的最长毫秒时间。

    属性值的类型

    int

    属性值的单位

    毫秒

    默认值

    10000

    可以应用的socket类型

    当使用多路传输方式时,所有socket可用

    ZMQ_SNDBUF:返回内核传输缓冲区的大小

    ZMQ_SNDBUF属性会返回socket参数指定的socket的底层内核的传输缓存的大小。如果这个值是0,则说明OS的默认值是生效的。要获取更多细节请参考您的操作系统文档中关于SO_SNDBUF的套接字属性。

    属性值的类型

    int

    属性值的单位

    B

    默认值

    0

    可以应用的socket类型

    所有socket可用

    ZMQ_RCVBUF:返回内核的接收缓存大小

    ZMQ_RCVBUF属性会返回socket参数指定的socket的底层内核的接收缓存大小。如果返回值是0,说明OS的默认值在起作用。要获取更多细节请参考您的操作系统文档中关于SO_RCVBUF的套接字属性。

    属性值的类型

    int

    属性值的单位

    B

    默认值

    0

    可以应用的socket类型

    所有socket可用

    ZMQ_LINGER:返回关闭socket的时候的存留时间(linger period)

    ZMQ_LINGER属性会返回socket参数指定的socket的存留时间。存留时间决定了当socket被zmq_close(3)关闭后,将要被发送而没有发送到另一端的消息在内存中能够停留的时间。这会进一步影响与此socket相关联的context使用zmq_term(3)方式进行终结的结果。下面指出了几种不同的行为:

      ●默认值是 -1,指定一个无限的存留时间。在此期间的消息不会由于zmq_close()函数的使用而被终结。试图使用zmq_term()函数来终结于此socket相关联的context的行为会被阻塞,直到消息被发送到对端为止。

      ●属性值是0指明了没有存留时间。当使用zmq_close()关闭socket的时候,消息队列中的消息会被立刻丢弃。

      ●属性值是正数表示会绑定一个毫秒级的正值。在调用zmq_close()函数后,发送消息队列中的消息不会被丢弃;试图使用zmq_term()函数对与socket相关联的context进行终结的操作都会被阻塞,直到所有的消息都被发送到对端,或者停留时间结束了,停留时间结束的时候,消息队列中的所有消息都会被丢弃。

    属性值的类型

    int

    属性值的单位

    毫秒

    默认值

    -1

    可以应用的socket类型

    所有socket可用

    ZMQ_RECONNECT_IVL:返回重连时间间隔

    ZMQ_RECONNECT_IVL属性会返回scoket指定的socket的初始化重连间隔。重连间隔是当使用面向连接的传输方式的时候,在连接断开的时候,ZMQ尝试重新进行连接的等待周期。属性值是 -1表示不需要重连。

    重连周期可能会被ZMQ随机选取,以避免当一个socket连接了多个对端的时候网络拓扑中出现重连风暴。

    属性值的类型

    int

    属性值的单位

    毫秒

    默认值

    100

    可以应用的socket类型

    面向连接的传输方式时,所有socket可用

    ZMQ_RECONNECT_IVL_MAX:返回重连间隔的最大值

    ZMQ_RECONNECT_IVL_MAX属性返回socket参数指定的socket重连间隔的最大值。这个属性是在你两次尝试重连之间等待时间的最大值。在每次重连的时候,重连间隔都会是前一次的两倍,直到到达ZMQ_RECONNECT_IVL_MAX。这个属性允许指数补偿策略。默认值是非指数执行方式,并且重连间隔只基于ZMQ_RECONNECT_IVL。

    小于ZMQ_RECONNECT_IVL的值都会被忽略。

    属性值的类型

    int

    属性值的单位

    毫秒

    默认值

    0(只使用ZMQ_RECONNECT_IVL)

    可以应用的socket类型

    面向连接的传输方式时,所有socket可用

    ZMQ_BACKLOG:返回未解决的链接队列的最大值

    ZMQ_BACKLOG属性返回socket参数指定的socket上未解决的链接队列长度的最大值;这只对面向连接的传输方式有效。要获得更多细节,请参考您的操作系统文档中关于listen函数的部分。

    属性值的类型

    int

    属性值的单位

    链接

    默认值

    100

    可以应用的socket类型

    面向连接的传输方式时,所有socket可用

    ZMQ_MAXMSGSIZE:流入的消息大小的最大值

    这个属性会返回流入的消息的限制。如果一个对端发送了一个比ZMQ_MAXMSGSIZE长的消息,这个链接就会断开。值是 -1表示没有限制。

    属性值的类型

    int64_t

    属性值的单位

    B

    默认值

    -1

    可以应用的socket类型

    所有socket可用

    ZMQ_MULTICAST_HOPS:广播包的最大网络跳数

    这个属性用于返回向外发送的广播包的存活时间。默认值是 -1,表示这个广播包不能够离开本地网络。

    属性值的类型

    int

    属性值的单位

    网络跳数

    默认值

    -1

    可以应用的socket类型

    当使用广播传输方式时,所有socket可用

    ZMQ_RCVTIMEO:在一个socket操作返回EAGAIN错误之前的最长时间

    返回在一个socket上执行接收操作的超时时间。如果这个属性值是0,zmq_recv(3)函数会立即返回,如果没有消息可用就返回EAGAIN错误。如果这个属性值是 -1,这个操作就会阻塞,直到有消息可用为止。对于所有其它值,这个操作会在返回EAGAIN错误先等待接收消息这么长的时间。

    属性值的类型

    int

    属性值的单位

    毫秒

    默认值

    -1(无限等待)

    可以应用的socket类型

    所有socket可用

    ZMQ_SNDTIMEO:在一个socket操作返回EAGAIN错误之前的最长时间

    返回socekt上发送操作超时时间。如果这个属性值是0,zmq_send(3)函数就会立即返回,如果这个消息无法发送,就返回EAGAIN错误代码。如果这个属性值是 -1,发送操作会阻塞,直到消息被发送出去为止。对于所有其它的值,在返回EAGAIN错误之前,发送操作会在这段时间内尝试发送消息。

    属性值的类型

    int

    属性值的单位

    毫秒

    默认值

    -1(无限等待)

    可以应用的socket类型

    所有socket可用

    ZMQ_IPV6:返回socket的IPv6状态

    返回这个socket的IPv6属性。如果这个值是1,表示IPv6在这个socket上允许使用;如果是0,表示这个socket只能使用IPv4。如果IPv6是可用的,这个socket可以连接/接受IPv4/IPv6主机的连接。

    属性值的类型

    int

    属性值的单位

    布尔

    默认值

    0(否)

    可以应用的socket类型

    当使用TCP连接的时候,所有socket可用

    ZMQ_IPV4ONLY:返回只使用IPv4的socket代理状态

    返回这个socket只使用IPv4的属性。这个属性请慎用。

    请使用ZMQ_IPV6属性。

    属性值的类型

    int

    属性值的单位

    布尔

    默认值

    1(是)

    可以应用的socket类型

    当使用TCP连接的时候,所有socket可用

    ZMQ_IMMEDIATE:返回连接接触的值

    返回连接接触的状态值。如果设置为1,回延迟连接上的接触管道,直到底层的连接建立完成了。如果没有其它的连接,这回导致这个socket阻塞;但是会防止在等待连接的期间出现消息队列被填满。

    属性值的类型

    int

    属性值的单位

    布尔

    默认值

    0(否)

    可以应用的socket类型

    所有socket可用,当使用TCP/IPC传输方式的时候首先考虑

    ZMQ_FD:返回与这个socket联系的文件描述符

    ZMQ_FD属性会返回与这个socket相联系的文件描述符。被返回的文件描述符可以被用来把这个socket集成到一个已经存在的事件循环里面; ZMQ动态链接库会通过标记文件描述符已准备好被读取了,当这个socket上有任何事件处于一种边沿触发方式的时候。

    能否从返回的文件描述符中读取数据,不须要指明是否能够从底层的socket中读取或者写入;应用程序必须通过ZMQ_EVENTS属性进行后续的检索,来检查真是的事件状态。

    返回的文件描述符也必须使用zmq_send 和zmq_recv函数在内部使用。因为文件描述符是边缘触发中断的,应用程序在每次调用zmq_send 或者 zmq_recv函数进行读取之后都需要更新ZMQ_EVENTS的状态。说的更明确:在调用zmq_send函数之后,这个socket可能变得可读了(反之亦然),但是并没有在这个问价描述符上触发一次读事件。
    返回的文件描述符被设计用于使用poll或者类似的系统调用。应用程序千万不要试图直接对其进行数据读写,也不要试图关闭它。

    属性值的类型

    在POSIX系统中为int,在Windows系统中为SOCKET

    属性值的单位

    N/A

    默认值

    N/A

    可以应用的socket类型

    所有socket可用

    ZMQ_EVENTS:返回socket的事件状态

    ZMQ_EVENTS属性会返回socket参数指定的socket的事件状态。返回值是一个由下列事件标志进行或操作的组合:

      ZMQ_POLLIN:指出至少有一个消息可以在此socket上就行非阻塞接收。

      ZMQ_POLLOUT:指出至少有一个消息可以在此socket上进行非阻塞发送。

    被ZMQ_FD属性返回的文件描述组合,已经可以被读取数据但是ZMQ_EVENTS属性检查后却没有实际的事件返回的情况也是正常的;应用程序只需要简单的忽略这种情况并且重新启动它们的操作/事件循环即可。

    属性值的类型

    int

    属性值的单位

    N/A(标志)

    默认值

    N/A

    可以应用的socket类型

    所有socket可用

    ZMQ_LAST_ENDPOINT:返回最后一个终结点

    ZMQ_LAST_ENDPOINT属性会返回最后绑定的TCP/IPC传输协议的终结点。返回值会是一个ZMQ DSN格式的字符串。注意,如果TCP主机是INADDR_ANY,或者是由*指定的,那么返回值会是0.0.0.0(IPv4)。

    属性值的类型

    以NULL结尾的字符串

    属性值的单位

    N/A

    默认值

    NULL

    可以应用的socket类型

    当使用TCP/IPC协议的时候,所有socket可用

    ZMQ_TCP_KEEPALIVE:重写SO_KEEPALIVE socket属性

    重写SO_KEEPALIVE socket 属性(被OS支持的)。默认值是 -1,表示跳过任何重写操作,并且使用系统的默认值。

    属性值的类型

    int

    属性值的单位

    -1, 0 , 1

    默认值

    -1(使用OS的默认值)

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_TCP_KEEPALIVE_IDLE:重写TCP_KEEPCNT(或者一些系统上的TCP_KEEPALIVE)

    重写TCP_KEEPCNT(或者一些OS上的TCP_KEEPALIVE)属性(被OS支持的)。默认值是 -1,表示跳过任何重写操作并使用OS的默认值。

    属性值的类型

    int

    属性值的单位

    -1, >0

    默认值

    -1(使用OS的默认值)

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_TCP_KEEPALIVE_CNT:重写TCP_KEEPCNT socket属性

    重写TCP_KEEPCNT socket属性(被操作系统支持的)。默认值是 -1,表示跳过所有的重写操作并且使用系统的默认值。

    属性值的类型

    int

    属性值的单位

    -1, >0

    默认值

    -1(使用OS的默认值)

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_TCP_KEEPALIVE_INTVL:重写TCP_KEEPINTVL socket属性

    重写TCP_KEEPINTVL socket属性(被操作系统支持的)。默认值是 -1,表示跳过所有的重写操作,并且使用操作系统的默认值。

    属性值的类型

    int

    属性值的单位

    -1, >0

    默认值

    -1(使用OS的默认值)

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_MECHANISM:返回当前的安全机制

    ZMQ_MECHANISM属性返回这个socket当前的安全机制。

    属性值的类型

    int

    属性值的单位

    ZMQ_NULL, ZMQ_PLAIN, 或者ZMQ_CURVE

    默认值

    ZMQ_NULL

    可以应用的socket类型

    当使用TCP/IPC协议的时候,所有socket可用

    ZMQ_PLAIN_SERVER:返回当前PLAIN服务的角色

    返回ZMQ_PLAIN_SERVER属性,如果有的话,socket预设的。

    属性值的类型

    int

    属性值的单位

    0,1

    默认值

    int

    可以应用的socket类型

    当使用TCP/IPC协议的时候,所有socket可用

    ZMQ_PLAIN_USERNAME:返回当前PLAIN的用户名

    ZMQ_PLAIN_USERNAME属性会返回给PLAIN安全机制最后设置的用户名。返回值必须是一个以NULL结尾的字符串或者空字符串。返回的空间大小应该包括这个结尾的字符字节。

    属性值的类型

    以NULL结尾的字符串

    属性值的单位

    N/A

    默认值

    空字符串

    可以应用的socket类型

    当使用TCP/IPC协议的时候,所有socket可用

    ZMQ_PLAIN_PASSWORD:返回当前的密码

    ZMQ_PLAIN_PASSWORD属性返回给PLAIN安全机制最后设置的密码。返回值必须是一个以NULL结尾的字符串或者空字符串。返回的空间大小应该包括这个空字节。

    属性值的类型

    以NULL结尾的字符串

    属性值的单位

    N/A

    默认值

    空字符串

    可以应用的socket类型

    当使用TCP/IPC协议的时候,所有socket可用

    ZMQ_CURVE_PUBLICKEY:返回当前CURVE的公钥

    返回此socket上当前长期公钥。你可以提供一个32B的存储空间,来接收二进制公钥值,或者41B的存储空间,来接收Z85格式的值。注意:为了能够取得一个可打印的公钥,存储空间必须是41B的大小,40B用来存放公钥值,1B存放空字符。

    属性值的类型

    二进制数据或Z85字符串

    属性值的单位

    32或41

    默认值

    空字符串

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_CURVE_SECRETKEY:返回当前的CURVE socket 秘钥

    返回此socket的当前长期秘钥。以可以提供一个32B的存储空间,来接收二进制秘钥,或者41B的存储空间,来接收Z85格式的可打印秘钥。

    属性值的类型

    二进制数据或Z85字符串

    属性值的单位

    32或41

    默认值

    空字符串

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_CURVE_SERVERKEY:返回当前的CURVE服务器码

    返回客户端socket的当前的服务器码。你可以提供32B的存储空间,来接收二进制的值,或者41B的存储空间,来接收Z85格式的可打印值。

    属性值的类型

    二进制数据或Z85字符串

    属性值的单位

    32或41

    默认值

    空字符串

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    ZMQ_ZAP_DOMAIN:返回RFC 27的认证域

    ZMQ_ZAP_DOMAIN属性会返回给此socket最后设置的ZAP域。返回值可能是一个以NULL结尾的字符串,或者空字符串。返回的字符串长度应该包括最后的结束字符。

    属性值的类型

    字符串

    属性值的单位

    N/A

    默认值

    无设置

    可以应用的socket类型

    当使用TCP协议的时候,所有socket可用

    Return value

    如果执行成功,zmq_getsockopt()函数会返回0。否则会返回 -1,并且设置errno为下列中定义的值。

    Errors

      EINVAL

        请求的属性名称option_name未知;或者option_len或option_value参数不可用;或者由option_value参数指定的存储空间的大小,即参数option_len太小。

      ETERM

        与socket参数指定的socket相联系的context被终结了。

      ENOTSOCK

        参数提供的socket不可用。

      EINTR

        此操作被传来的信号中断了。

    Example

      返回向外发送的消息的高水位

    /* Retrieve high water mark into sndhwm */
    int sndhwm;
    size_t sndhwm_size = sizeof (sndhwm);
    rc = zmq_getsockopt (socket, ZMQ_SNDHWM, &sndhwm, &sndhwm_size);
     assert (rc == 0);

    See also

    zmq_setsockopt(3) zmq_socket(3) zmq(7)

    Authors

    This page was written by the ØMQ community. To make a change please read the ØMQ Contribution Policy at http://www.zeromq.org/docs:contributing.

    Web site design and content is copyright (c) 2007-2012 iMatix Corporation. Contact us for professional support. Site content licensed under the Creative Commons Attribution-Share Alike 3.0 License. ØMQ is copyright (c) Copyright (c) 2007-2012 iMatix Corporation and Contributors. ØMQ is free software licensed under the LGPL. ØMQ, ZeroMQ, and 0MQ are trademarks of iMatix Corporation. Terms of Use — Privacy Policy

  • 相关阅读:
    Android-通过SlidingPaneLayout高仿微信6.2最新版手势滑动返回(一)
    B树
    nyoj448 寻找最大数
    IT痴汉的工作现状22-由Dalvik虚拟机引发的口水战
    POJ 3221 Diamond Puzzle.
    CMDBuild安装及webservice接口的获取
    安卓dex 文件结构简要说明
    安装RPM包或者安装源代码包
    Java程序性能优化技巧
    [Sqlite]-->数据迁移备份--从低版本号3.6.2到高版本号3.8.6
  • 原文地址:https://www.cnblogs.com/fengbohello/p/4474333.html
Copyright © 2011-2022 走看看