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