Name
zmq_setsockopt –設置ZMQ socket的屬性
Synopsis
int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len);
注意:除了以下屬性,所有的屬性均需要在對socket進行bind/connect操作之前設置: ZMQ_SUBSCRIBE, ZMQ_UNSUBSCRIBE, ZMQ_LINGER, ZMQ_ROUTER_HANDOVER, ZMQ_ROUTER_MANDATORY, ZMQ_PROBE_ROUTER, ZMQ_XPUB_VERBOSE, ZMQ_REQ_CORRELATE, and ZMQ_REQ_RELAXED 特別的,安全的屬性也可以在bind/connect操作之后生效,並且可以隨時進行修改並影響之后的bind/connect操作。
Description
zmq_setsockopt()函數會對socket參數指定的socket進行設置,設置的屬性由option_name參數指定,屬性值由參數option_value指定。option_len參數指定屬性值的數據存儲空間的大小。
以下的socket屬性可以通過zmq_setsockopt()函數進行設置:
ZMQ_SNDHWM:對向外發送的消息設置高水位(最大緩存量)
ZMQ_SNDHWM屬性將會設置socket參數指定的socket對外發送的消息的高水位。高水位是一個硬限制,它會限制每一個與此socket相連的在內存中排隊的未處理的消息數目的最大值。0值代表着沒有限制。
如果已經到達了規定的限制,socket就需要進入一種異常的狀態,表現形式因socket類型而異。socket會進行適當的調節,比如阻塞或者丟棄已發送的消息。請從zmq_socket(3)函數中查看更多細節,獲取每種類型的socket的精確的行為。
ZMQ並不能保證可以接收像ZMQ_SNDHWM參數一樣多的消息,而實際的限制可能在60~70%一下,這取決於這個socket上的消息流。
屬性值的類型 |
int |
屬性值的單位 |
消息 |
默認值 |
1000 |
可以應用的socket類型 |
所有類型 |
ZMQ_RCVHWM:對進入socket的消息設置高水位
ZMQ_RCVHWM屬性將會設置socket參數指定的socket進入的消息的高水位。高水位是一個硬限制,它會限制每一個與此socket相連的在內存中排隊的未處理的消息數目的最大值。0值代表着沒有限制。
如果已經到達了規定的限制,socket就需要進入一種異常的狀態,表現形式因socket類型而異。socket會進行適當的調節,比如阻塞或者丟棄被發送的消息。請從zmq_socket(3)函數中查看更多細節,獲取每種類型的socket的精確的行為。
屬性值的類型 |
int |
屬性值的單位 |
消息 |
默認值 |
1000 |
可以應用的socket類型 |
所有類型 |
ZMQ_LINGER:為socket關閉設置停留時間
ZMQ_LINGER屬性會給指定的socket設定關閉前的停留時間。停留時間指定了在對一個socket調用zmq_close(3)函數之后,這個socekt上即將被發送但還沒有被發送到對端的消息在內存中繼續停留的時間。這個屬性進而還會影響到與這個scoket相關聯的context上zmq_term(3)操作的進行終結的結果。下面簡述了不同的行為:
屬性值 -1表示無限的停留時間。還沒被發送的消息在socket調用zmq_close()操作之后不會被丟棄;試圖使用zmq_term()操作對context進行終結的操作會被阻塞,直到所有沒有被發送的消息被發往對端為止。
屬性值0 表示沒有停留時間。當使用zmq_close()函數將socket關閉的時候,所有沒有被發送呃消息都會被丟棄。
屬性是正數值表示設置一個毫秒為單位的停留時間。在第socket調用zmq_close()操作后,還沒有發送的消息不會被丟棄;試圖使用zmq_term()對於此scoket相關聯的context進行終結的時候會被阻塞,直到所有未被發送的消息都被發往對端;或者停留時間已經到達,此時所有未發送的消息都會被丟棄。
屬性值的類型 |
int |
屬性值的單位 |
毫秒 |
默認值 |
-1 |
可以應用的socket類型 |
所有類型 |
ZMQ_RCVTIMEO:在一個recv操作返回EAGAIN錯誤前的最大時間
設置socket的接收操作超時時間。如果屬性值是0,zmq_recv(3)函數將會立刻返回,如果沒有接收到任何消息,將會返回EAGAIN錯誤。如果屬性值是 -1,將會阻塞,直到接收到消息為止。對於任何其它值,都會進行等待這么多時間,直到返回EAGAIN錯誤。
屬性值的類型 |
int |
屬性值的單位 |
毫秒 |
默認值 |
-1(無限等待) |
可以應用的socket類型 |
所有類型 |
ZMQ_SNDTIMEO:在一個發送操作返回EAGAIN之前等待的最大時間
設置指定socket的發送超時。如果屬性值是0,zmq_send(3)函數會立即返回,如果無法發送此消息,則返回EAGAIN錯誤值。如果屬性值是 -1,那么在消息發送之前會進入阻塞模式。對於所有其它的值,將會在超時時間內進行嘗試發送消息,超時后返回EAGAIN錯誤。
屬性值的類型 |
int |
屬性值的單位 |
毫秒 |
默認值 |
-1(無限等待) |
可以應用的socket類型 |
所有類型
|
更多選項請參照:http://www.cnblogs.com/fengbohello/p/4398953.html
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq-setsockopt