ZeroMQ接口函數之 :zmq_getsockopt – 獲取ZMQ socket的屬性


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

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

 


 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM