ZeroMQ接口函數之 :zmq_setsockopt –設置ZMQ socket的屬性


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

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

 


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

zmq_setsockopt(3)         ØMQ Manual - ØMQ/4.1.0

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_AFFINITY:設置I/O線程關聯

ZMQ_AFFINITY屬性會對socket參數指定的socket新創建的鏈接設置I/O線程關聯。

關聯指明了和scoket相關的context上的哪個線程池中的哪個線程來處理新創建的鏈接。0值表示沒有關聯,這意味着工作將在線程池中平等的向所有進程進行分發。對於非0值,最低位對應線程1,第二低位對應線程2,等等。比如,設置的值是3的話,說明socket上這之后的鏈接請求將被I/P線程1和2處理。

請參見zmq_init(3)函數了解更多關於對I/O線程分配的細節。

屬性值的類型

uint64_t

屬性值的單位

N/A (bitmap)

默認值

0

可以應用的socket類型

N/A

ZMQ_SUBSCRIBE:創建消息過濾標志

ZMQ_SUBSCRIBE屬性將會在ZMQ_SUB類型的socekt上創建一個新的消息過濾標志。新建立的ZMQ_SUB類型socket會對進入socket的所有消息進行過濾,這樣你就可以使用這個屬性來建立最初的消息過濾項。

一個option_value的長度是0的過濾屬性會訂閱所有的廣播消息。一個非空的option_value值會只訂閱所有以option_value的值為前綴的消息。一個ZMQ_SUB類型的socket可以附加多個過濾條件,只要一個消息符合過濾條件中的任何一個就會被接受。

屬性值的類型

二進制數據

屬性值的單位

N/A

默認值

N/A

可以應用的socket類型

ZMQ_SUB

ZMQ_UNSUBSCRIBE:移除消息過濾選項

ZMQ_UNSUBSCRIBE選項會移除一個ZMQ_SUB類型中已經存在的消息過濾項。需要被移除的過濾選項必須是已經使用ZMQ_SUBSCRIBE選項建立了的。如果添加了幾個相同的過濾項,ZMQ_UNSUBSCRIBE選項只會移除其中的一個,其它的可以繼續使用。

屬性值的類型

二進制數據

屬性值的單位

N/A

默認值

N/A

可以應用的socket類型

ZMQ_SUB

ZMQ_IDENTITY:設置socket 身份ID

ZMQ_IDENTITY選項會設置socket的身份ID。socket的身份ID只會能在請求/回復模式中使用。也就是說,可以使用ROUTER類型的socket進行socket串聯,根據給定的身份ID可以對消息進行路由。

身份ID至少有1 B的長度,最多有255 B的長度。以0位開始的身份ID由ZMQ保留使用。

如果兩個socket使用相同的身份ID向第三方進行連接,后果是不確定的。

屬性值的類型

二進制數據

屬性值的單位

N/A

默認值

NULL

可以應用的socket類型

ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER, ZMQ_DEALER

ZMQ_RATE:設置廣播數據的頻率

ZMQ_RATE屬性會對socket的接收和發送廣播(比如zmq_pgm())的頻率最大值進行設置。

屬性值的類型

int

屬性值的單位

千比特/秒

默認值

100

可以應用的socket類型

使用多路廣播時,對所有socket類型都可用

ZMQ_RECOVERY_IVL:設置多路廣播恢復時間

ZMQ_RECOVERY_IVL屬性將會對socket參數指定的socket多路廣播恢復時間進行設置。恢復時間決定了,當一個接收端從一個廣播組退出后再連接上來之前,在數據丟失,導致數據不可恢復前的最大時間間隔,時間以毫秒為單位。

注意:當設置較大的恢復時間時,這回非常耗內存。比如,傳輸速率是1Gbps時,1分鍾長的回復時間,會導致7GB的內存消耗。

屬性值的類型

int

屬性值的單位

毫秒

默認值

10000

可以應用的socket類型

使用多路廣播時,對所有socket類型都可用

ZMQ_SNDBUF:設置內核傳輸緩沖區大小

ZMQ_SNDBUF屬性會對socekt參數指定的socket設置底層內核的傳輸緩存大小,以B為單位進行設置。設置的屬性值是0,則意味着使用OS的默認值。你可以查看你的操作系統手冊來獲得SO_SNDBUF屬性更詳細的信息。

屬性值的類型

int

屬性值的單位

B(字節)

默認值

0

可以應用的socket類型

所有類型

ZMQ_RCVBUF:設置內核傳輸緩沖區大小

ZMQ_RCVBUF屬性會對socekt參數指定的socket設置底層內核的傳輸緩存大小,以B為單位進行設置。設置的屬性值是0,則意味着使用OS的默認值。你可以查看你的操作系統手冊來獲得SO_RCVBUF屬性更詳細的信息。

屬性值的類型

int

屬性值的單位

B(字節)

默認值

0

可以應用的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_RECONNECT_IVL:設置重連間隔

ZMQ_RECONNECT_IVL屬性會設置指定的scoket的初始套接字重連間隔。重連間隔是使用面向連接的傳輸方式的時候,當與對端的鏈接斷開后,嘗試再次進行連接時的ZMQ周期。屬性值是 -1表示不進行重連。

ZMQ中的重連間隔可能是個隨機的較大數值,以防在拓撲結構中重連風暴的發生。

屬性值的類型

int

屬性值的單位

毫秒

默認值

100

可以應用的socket類型

當使用面向連接的傳輸方式時,所有類型

ZMQ_RECONNECT_IVL_MAX:設置重連間隔的最大值

ZMQ_RECONNECT_IVL_MAX屬性會設置指定的scoket的重連間隔最大值。這是在ZMQ重連周期之間的最大值。在每次的重連企圖中,重連間隔值都會是前一次的兩倍,知道達到ZMQ_RECONNECT_IVL_MAX值。這允許指數補償策略。默認值表示不執行指數補償策略,並且重連間隔時間只基於ZMQ_RECONNECT_IVL進行計算。

低於ZMQ_RECONNECT_IVL的值將被忽略。

屬性值的類型

int

屬性值的單位

毫秒

默認值

0(只使用ZMQ_RECONNECT_IVL)

可以應用的socket類型

當使用面向連接的傳輸方式時,所有類型

ZMQ_BACKLOG:設置向外發起的連接隊列的最大長度

ZMQ_BACKLOG屬性會設置指定的socket的每一個向外連接隊列的最大長度;這只對面向連接的傳輸方式起作用。要查看更多細節請查看你的操作系統的文檔中listen函數。

屬性值的類型

int

屬性值的單位

連接

默認值

1000

可以應用的socket類型

當使用面向連接的傳輸方式時,所有類型

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

限制進入的消息的大小。如果一端發送了一條消息比ZMQ_MAXMSGSIZE大,就會斷開連接。屬性值是 -1表示沒有限制。

屬性值的類型

int64_t

屬性值的單位

B(字節)

默認值

-1

可以應用的socket類型

所有類型

ZMQ_MULTICAST_HOPS:多播數據包時候的最大網絡中繼

設置從這個socket發送出去的多播數據包的存活時間默認值是1,表示這個多播包不能離開本地網絡。

屬性值的類型

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類型

所有類型

ZMQ_IPV6:在socket上允許使用IPv6

設置此socket的IPv6屬性。屬性值是1表示IPv6在此socket上可以使用,而屬性值是0表示此socket上只能使用IPv4。當socket上允許使用IPv6的時候,這個scoket可以IPv4或者IPv6進行連接或者接受連接。

屬性值的類型

int

屬性值的單位

布爾

默認值

0(false)

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_IPV4ONLY:在socket上只使用IPv4

設置只使用IPv4屬性。不贊成使用這個屬性。請使用ZMQ_IPV6屬性。

屬性值的類型

int

屬性值的單位

布爾

默認值

1(true)

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_IMMEDIATE:隊列消息只作用於已完成的鏈接

默認情況下,消息隊列在及時連接沒有完全建立的時候也會向外發送消息。這會導致使用循環路由的scoket(REQ,PUSH,DEALER)消息“丟失”。如果屬性值設置為1,消息只會在連接已經建立完成的時候才會進行發送。這回導致當另一方沒有連接的時候出現阻塞的情況,但是可以防止消息隊列在等待連接的時候填充管道。

屬性值的類型

int

屬性值的單位

布爾

默認值

0(false)

可以應用的socket類型

當使用面向連接的時候,所有類型可用

ZMQ_ROUTER_HANDOVER:處理ROUTER socket上的每一個身份ID名沖突

設置當ROUTER socket遇到同名身份ID時的行為。默認情況下,當兩個對頓使用相同的身份ID連接到同一個ROUTER socket上的時候,結果是不確定的。屬性值是1表示會使ROUTER scoket遇到身份ID沖突的時候進行身份ID的重新分配。特別的,第一次連接上來的socket將會被中介,而第二次連接上來的socket將會接收接下來所有路由給這個身份ID名的消息。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_ROUTER

ZMQ_ROUTER_MANDATORY:在ROUTER socket上只接收可以進行路由的消息

設置ROUTER socket收到無法路由的消息時的行為。默認屬性值是0,表示會靜默的丟棄不能路由到的消息。屬性值是1時,如果消息不能路由,會返回一個EHOSTUNREACH錯誤代碼。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_ROUTER

ZMQ_ROUTER_RAW:轉換ROUTER socket到原始模式

當設置為1的時候,及把ROUTER 設置為原始模式。當ROUTER為原始模式並且在使用tcp://傳輸方式的時候,將不會以ZMQ格式讀取和寫入TCP數據。這就使ZMQ應用程序可以和非ZMQ程序進行交流。當使用原始模式的時候,你不能使用明確的身份ID,並且在發送消息的時候ZMQ_MSGMORE標志也會被忽略。在原始模式下,你可以采用在發送了一個明確的身份ID后,緊跟着發送一個空消息來關閉一個指定的連接。

不建議使用這個選項,請使用ZMQ_STREAM 類型的socket來代替。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_ROUTER

ZMQ_PROBE_ROUTER:ROUTER socket 的引導連接

當次屬性設置為1的時候,如果有閑的連接建立了或者接受了新的連接,這個scoket就會自動發送一個空的消息。你可以在連接到ROUTER socket的REQ、DEALER或者ROUTER socket上設置這個屬性。這些應用程序必須能夠區分這個空消息。ZMQ_PROBE_ROUTER屬性實際上給ROUTER應用程序提供了一個信號信號,說明一個新的對端活着。

不要在一個向任何socket類型進行會話的socket上設置此屬性:結果是未知的。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_ROUTER,ZMQ_DEALER,ZMQ_REQ

ZMQ_XPUB_VERBOSE:提供XPUB socket上的所有訂閱消息

設置XPUB socket在新的訂閱和取消訂閱時的行為。默認屬性值是0,並且只允許新的訂閱消息通過傳輸到上游。屬性值是1表示允許所有的訂閱信息通過傳輸到上游。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_XPUB

ZMQ_REQ_CORRELATE:匹配請求回復

REQ scoket的默認行為是依靠消息的次序進行請求和回復的匹配,並且這種方式一般情況下也是足夠用的。當這個屬性值設置成1的時候,REQ socket 會在向外發送的消息前面加上一個請求ID幀前綴。這就意味着整個消息的結構是(請求ID,0,用戶幀)。REQ socket會丟棄所有不是以這兩個幀作為開始的消息。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_REQ

ZMQ_REQ_RELAXED:放松請求和回復之間嚴格的輪換

默認情況下,REQ socket 不允許在接收到上一個回復之前使用zmq_send(3)開始一個新的請求。當這個屬性值設置為1的時候,會允許發送另一個請求,並且結果是斷開與期望回復消息端的底層的鏈接,在支持重連的傳輸協議里,會觸發一個重連的嘗試。請求-回復狀態被重置,並且一個新的請求會發送到下一個可用的對端上。

如果設置此屬性值為1,應該同時設置ZMQ_REQ_CORRELATE可用,以確保對請求和回復的正確匹配。否則,如果一個已經被斷開的鏈接發來一個遲來的回復,可能會被認作后來的請求的回復。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

ZMQ_REQ

ZMQ_TCP_KEEPALIVE:代替SO_KEEPALIVE屬性

代替了SO_KEEPALIVE屬性。默認值是 -1,表示跳過所有的重寫操作,並且把這些屬性值交給操作系統。

屬性值的類型

int

屬性值的單位

-1, 0,1

默認值

-1(使用操作系統的值)

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_TCP_KEEPALIVE_IDLE:代替TCP_KEEPCNT(有些操作系統上是TCP_KEEPALIVE)屬性

代替TCP_KEEPCNT(有些操作系統上是TCP_KEEPALIVE)屬性(當操作系統支持的時候)。默認值是 -1,表示跳過所有的重寫操作,並且把這些屬性值交給操作系統。

屬性值的類型

int

屬性值的單位

-1,  > 0

默認值

-1(使用操作系統的值)

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_TCP_KEEPALIVE_CNT:代替TCP_KEEPCNT socket屬性

代替TCP_KEEPCNT socket屬性(當操作系統支持的時候)。默認值是 -1,表示跳過所有的重寫操作,並且把這些屬性值交給操作系統。

屬性值的類型

int

屬性值的單位

-1,  > 0

默認值

-1(使用操作系統的值)

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_TCP_KEEPALIVE_INTVL:代替TCP_KEEPINTVL socket 屬性

代替TCP_KEEPINTVL socket 屬性(當操作系統支持的時候)。默認值是 -1,表示跳過所有的重寫操作,並且把這些屬性值交給操作系統。

屬性值的類型

int

屬性值的單位

-1,  > 0

默認值

-1(使用操作系統的值)

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_TCP_ACCEPT_FILTER:為新連上來的TCP連接分配過濾器

在一個監聽socket上分配一個任意的過濾器會作用於每一個新連接上來的TCP鏈接。如果沒有使用任何過濾器,TCP傳輸會允許任意的IP地址連接上來。如果設置了至少一個過濾器,那么新連接上來的源ip就需要能夠匹配。向情況所有的過濾器,請調用zmq_setsockopt(socket, ZMQ_TCP_ACCEPT_FILTER, NULL, 0)。過濾器是一個以空字節結尾的IPv6或IPv4 CIDR(無類域間路由)。

屬性值的類型

二進制數據

屬性值的單位

N/A

默認值

無過濾(允許任何地方來的)

可以應用的socket類型

當使用TCP連接的時候,所有監聽socket

ZMQ_PLAIN_SERVER:設置PLAIN 服務的角色

定義一個socket是否作為PLAIN 安全方式的服務端,參見zmq_plain(7)。設置屬性值為1表示這個scoket將會作為PLAIN的服務端。屬性值設置為0表示這個socket不作為PLAIN服務端,並且它的安全方式依賴於其它的屬性設置。設置此屬性為0會重置這個scoket的安全方式為NULL。

屬性值的類型

int

屬性值的單位

0,1

默認值

0

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_PLAIN_USERNAME:設置PLAIN安全方式的用戶名

設置TCP或者IPC對外連接的用戶名。如果你設置這個屬性為非空值,用於連接的安全機制會是PLAIN,參見zmq_plain(7)。如果你設置此屬性值為空值,用於連接的安全機制會是NULL,參見zmq_null(3)

屬性值的類型

特征字符串

屬性值的單位

N/A

默認值

不設置

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_PLAIN_PASSWORD:設置PLAIN安全方式的密碼

設置TCP或者IPC對外連接的密碼。如果你設置這個屬性為非空值,用於連接的安全機制會是PLAIN,參見zmq_plain(7)。如果你設置此屬性值為空值,用於連接的安全機制會是NULL,參見zmq_null(3)

屬性值的類型

特征字符串

屬性值的單位

N/A

默認值

不設置

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_CURVE_SERVER:設置CURVE服務端角色

定義一個socket是否為CURVE 安全方式的服務端,參見zmq_curve(7)。屬性值是1表示這個 socket將會作為一個CURVE服務端。屬性值是0表示這個socket將不會作為CURVE客戶端,並且其安全方式的角色將會依賴於其它屬性設置。設置此屬性值為0將會重置此socket的安全方式為NULL。如果你設置這個屬性,你必須使用ZMQ_CURVE_SECRETKEY屬性設置這個服務端的秘鑰。一個服務端socket不需要知道它自己的公鑰。

屬性值的類型

int

屬性值的單位

0, 1

默認值

0

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_CURVE_PUBLICKEY:設置CURVE公鑰

設置socket的長期公鑰。你必須設置CURVE客戶端的這個屬性,參見zmq_curve(7)。你可以用32位二進制字節或者經過Z85格式加密后的40字符串。這個公鑰必須和秘鑰匹配使用。可以使用zmq_curve_keypair(3)函數生成一個公鑰/密鑰對。

屬性值的類型

二進制數據或者Z85格式的文本字符串

屬性值的單位

32或者40

默認值

NULL

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_CURVE_SECRETKEY:設置CURVE密鑰

這是此socket的長期密鑰。你必須在CURVE客戶端和服務端上都設置此屬性,參見zmq_curve(7)。你可以用32位二進制字節或者經過Z85格式加密后的40字符串。這個公鑰必須和秘鑰匹配使用。可以使用zmq_curve_keypair(3)函數生成一個公鑰/密鑰對。

屬性值的類型

二進制數據或者Z85格式的文本字符串

屬性值的單位

32或者40

默認值

NULL

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_CURVE_SERVERKEY:設置CURVE服務端碼

設置此socket的長期服務端碼。你必須在客戶端socket上設置此服務端碼,參見zmq_curve(7)。你可以用32位二進制字節或者經過Z85格式加密后的40字符串。這個公鑰必須和秘鑰匹配使用。這個碼必須是服務端生成密鑰的時候一塊生成的。

屬性值的類型

二進制數據或者Z85格式的文本字符串

屬性值的單位

32或者40

默認值

NULL

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_ZAP_DOMAIN:設置RFC 27認證域

設置ZAP(ZMQ RFC 27)認證域。對於空的安全方式(默認在所有的tcp://連接上),ZAP認證只在你設置一個非空的域時起作用。對於PLAIN和CURVE安全方式,如果有ZAP處理程序存在,總是會請求ZAP。參見http://rfc.zeromq.org/spec:27 獲取更多細節。

屬性值的類型

字符串

屬性值的單位

N/A

默認值

不設置

可以應用的socket類型

當使用TCP連接的時候,所有類型可用

ZMQ_CONFLATE:只保留最后到來的消息

如果設置了這個值,socket只會在其入站/出站隊列中保留一個消息,那就是最后一個接收到的消息,或者最后一個要發送的消息。設置此屬性會忽略ZMQ_RECVHWM屬性和ZMQ_SENDHWM屬性。不支持多幀消息,特別的,在socket的內部消息隊列中,只有一個幀會被保留。

屬性值的類型

int

屬性值的單位

布爾

默認值

0(false)

可以應用的socket類型

ZMQ_PULL, ZMQ_PUSH, ZMQ_SUB, ZMQ_PUB, ZMQ_DEALER

Return value

如果執行成功,zmq_setsockopt()函數會返回0。否則會返回 -1,並且設置errno為下列定義值中的一個。

Errors

  EINVAL

    請求的屬性中,屬性名稱為止,或者屬性長度或者屬性值不可用。

  ETERM

    和指定socket相關的context已經被終結了

  ENOTSOCK

    參數提供的socket不可用

  EINTR

    本次操作被信號中斷了

Example

  在一個ZMQ_SUB  socket上設置訂閱消息

/* 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);

See also

zmq_getsockopt(3)  zmq_socket(3)  zmq_plain(7)  zmq_curve(7)  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