日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性

發(fā)布時(shí)間:2025/3/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Name

zmq_setsockopt –設(shè)置ZMQ socket的屬性

Synopsis

int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len);
注意:除了以下屬性,所有的屬性均需要在對(duì)socket進(jìn)行bind/connect操作之前設(shè)置:
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操作之后生效,并且可以隨時(shí)進(jìn)行修改并影響之后的bind/connect操作。

Description

zmq_setsockopt()函數(shù)會(huì)對(duì)socket參數(shù)指定的socket進(jìn)行設(shè)置,設(shè)置的屬性由option_name參數(shù)指定,屬性值由參數(shù)option_value指定。option_len參數(shù)指定屬性值的數(shù)據(jù)存儲(chǔ)空間的大小。

以下的socket屬性可以通過zmq_setsockopt()函數(shù)進(jìn)行設(shè)置:

ZMQ_SNDHWM:對(duì)向外發(fā)送的消息設(shè)置高水位(最大緩存量)

ZMQ_SNDHWM屬性將會(huì)設(shè)置socket參數(shù)指定的socket對(duì)外發(fā)送的消息的高水位。高水位是一個(gè)硬限制,它會(huì)限制每一個(gè)與此socket相連的在內(nèi)存中排隊(duì)的未處理的消息數(shù)目的最大值。0值代表著沒有限制。

如果已經(jīng)到達(dá)了規(guī)定的限制,socket就需要進(jìn)入一種異常的狀態(tài),表現(xiàn)形式因socket類型而異。socket會(huì)進(jìn)行適當(dāng)?shù)恼{(diào)節(jié),比如阻塞或者丟棄已發(fā)送的消息。請(qǐng)從zmq_socket(3)函數(shù)中查看更多細(xì)節(jié),獲取每種類型的socket的精確的行為。

ZMQ并不能保證可以接收像ZMQ_SNDHWM參數(shù)一樣多的消息,而實(shí)際的限制可能在60~70%一下,這取決于這個(gè)socket上的消息流。

屬性值的類型

int

屬性值的單位

消息

默認(rèn)值

1000

可以應(yīng)用的socket類型

所有類型

ZMQ_RCVHWM:對(duì)進(jìn)入socket的消息設(shè)置高水位

ZMQ_RCVHWM屬性將會(huì)設(shè)置socket參數(shù)指定的socket進(jìn)入的消息的高水位。高水位是一個(gè)硬限制,它會(huì)限制每一個(gè)與此socket相連的在內(nèi)存中排隊(duì)的未處理的消息數(shù)目的最大值。0值代表著沒有限制。

如果已經(jīng)到達(dá)了規(guī)定的限制,socket就需要進(jìn)入一種異常的狀態(tài),表現(xiàn)形式因socket類型而異。socket會(huì)進(jìn)行適當(dāng)?shù)恼{(diào)節(jié),比如阻塞或者丟棄被發(fā)送的消息。請(qǐng)從zmq_socket(3)函數(shù)中查看更多細(xì)節(jié),獲取每種類型的socket的精確的行為。

屬性值的類型

int

屬性值的單位

消息

默認(rèn)值

1000

可以應(yīng)用的socket類型

所有類型

ZMQ_AFFINITY:設(shè)置I/O線程關(guān)聯(lián)

ZMQ_AFFINITY屬性會(huì)對(duì)socket參數(shù)指定的socket新創(chuàng)建的鏈接設(shè)置I/O線程關(guān)聯(lián)。

關(guān)聯(lián)指明了和scoket相關(guān)的context上的哪個(gè)線程池中的哪個(gè)線程來處理新創(chuàng)建的鏈接。0值表示沒有關(guān)聯(lián),這意味著工作將在線程池中平等的向所有進(jìn)程進(jìn)行分發(fā)。對(duì)于非0值,最低位對(duì)應(yīng)線程1,第二低位對(duì)應(yīng)線程2,等等。比如,設(shè)置的值是3的話,說明socket上這之后的鏈接請(qǐng)求將被I/P線程1和2處理。

請(qǐng)參見zmq_init(3)函數(shù)了解更多關(guān)于對(duì)I/O線程分配的細(xì)節(jié)。

屬性值的類型

uint64_t

屬性值的單位

N/A (bitmap)

默認(rèn)值

0

可以應(yīng)用的socket類型

N/A

ZMQ_SUBSCRIBE:創(chuàng)建消息過濾標(biāo)志

ZMQ_SUBSCRIBE屬性將會(huì)在ZMQ_SUB類型的socekt上創(chuàng)建一個(gè)新的消息過濾標(biāo)志。新建立的ZMQ_SUB類型socket會(huì)對(duì)進(jìn)入socket的所有消息進(jìn)行過濾,這樣你就可以使用這個(gè)屬性來建立最初的消息過濾項(xiàng)。

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

屬性值的類型

二進(jìn)制數(shù)據(jù)

屬性值的單位

N/A

默認(rèn)值

N/A

可以應(yīng)用的socket類型

ZMQ_SUB

ZMQ_UNSUBSCRIBE:移除消息過濾選項(xiàng)

ZMQ_UNSUBSCRIBE選項(xiàng)會(huì)移除一個(gè)ZMQ_SUB類型中已經(jīng)存在的消息過濾項(xiàng)。需要被移除的過濾選項(xiàng)必須是已經(jīng)使用ZMQ_SUBSCRIBE選項(xiàng)建立了的。如果添加了幾個(gè)相同的過濾項(xiàng),ZMQ_UNSUBSCRIBE選項(xiàng)只會(huì)移除其中的一個(gè),其它的可以繼續(xù)使用。

屬性值的類型

二進(jìn)制數(shù)據(jù)

屬性值的單位

N/A

默認(rèn)值

N/A

可以應(yīng)用的socket類型

ZMQ_SUB

ZMQ_IDENTITY:設(shè)置socket 身份ID

ZMQ_IDENTITY選項(xiàng)會(huì)設(shè)置socket的身份ID。socket的身份ID只會(huì)能在請(qǐng)求/回復(fù)模式中使用。也就是說,可以使用ROUTER類型的socket進(jìn)行socket串聯(lián),根據(jù)給定的身份ID可以對(duì)消息進(jìn)行路由。

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

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

屬性值的類型

二進(jìn)制數(shù)據(jù)

屬性值的單位

N/A

默認(rèn)值

NULL

可以應(yīng)用的socket類型

ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER, ZMQ_DEALER

ZMQ_RATE:設(shè)置廣播數(shù)據(jù)的頻率

ZMQ_RATE屬性會(huì)對(duì)socket的接收和發(fā)送廣播(比如zmq_pgm())的頻率最大值進(jìn)行設(shè)置。

屬性值的類型

int

屬性值的單位

千比特/秒

默認(rèn)值

100

可以應(yīng)用的socket類型

使用多路廣播時(shí),對(duì)所有socket類型都可用

ZMQ_RECOVERY_IVL:設(shè)置多路廣播恢復(fù)時(shí)間

ZMQ_RECOVERY_IVL屬性將會(huì)對(duì)socket參數(shù)指定的socket多路廣播恢復(fù)時(shí)間進(jìn)行設(shè)置。恢復(fù)時(shí)間決定了,當(dāng)一個(gè)接收端從一個(gè)廣播組退出后再連接上來之前,在數(shù)據(jù)丟失,導(dǎo)致數(shù)據(jù)不可恢復(fù)前的最大時(shí)間間隔,時(shí)間以毫秒為單位。

注意:當(dāng)設(shè)置較大的恢復(fù)時(shí)間時(shí),這回非常耗內(nèi)存。比如,傳輸速率是1Gbps時(shí),1分鐘長(zhǎng)的回復(fù)時(shí)間,會(huì)導(dǎo)致7GB的內(nèi)存消耗。

屬性值的類型

int

屬性值的單位

毫秒

默認(rèn)值

10000

可以應(yīng)用的socket類型

使用多路廣播時(shí),對(duì)所有socket類型都可用

ZMQ_SNDBUF:設(shè)置內(nèi)核傳輸緩沖區(qū)大小

ZMQ_SNDBUF屬性會(huì)對(duì)socekt參數(shù)指定的socket設(shè)置底層內(nèi)核的傳輸緩存大小,以B為單位進(jìn)行設(shè)置。設(shè)置的屬性值是0,則意味著使用OS的默認(rèn)值。你可以查看你的操作系統(tǒng)手冊(cè)來獲得SO_SNDBUF屬性更詳細(xì)的信息。

屬性值的類型

int

屬性值的單位

B(字節(jié))

默認(rèn)值

0

可以應(yīng)用的socket類型

所有類型

ZMQ_RCVBUF:設(shè)置內(nèi)核傳輸緩沖區(qū)大小

ZMQ_RCVBUF屬性會(huì)對(duì)socekt參數(shù)指定的socket設(shè)置底層內(nèi)核的傳輸緩存大小,以B為單位進(jìn)行設(shè)置。設(shè)置的屬性值是0,則意味著使用OS的默認(rèn)值。你可以查看你的操作系統(tǒng)手冊(cè)來獲得SO_RCVBUF屬性更詳細(xì)的信息。

屬性值的類型

int

屬性值的單位

B(字節(jié))

默認(rèn)值

0

可以應(yīng)用的socket類型

所有類型

ZMQ_LINGER:為socket關(guān)閉設(shè)置停留時(shí)間

ZMQ_LINGER屬性會(huì)給指定的socket設(shè)定關(guān)閉前的停留時(shí)間。停留時(shí)間指定了在對(duì)一個(gè)socket調(diào)用zmq_close(3)函數(shù)之后,這個(gè)socekt上即將被發(fā)送但還沒有被發(fā)送到對(duì)端的消息在內(nèi)存中繼續(xù)停留的時(shí)間。這個(gè)屬性進(jìn)而還會(huì)影響到與這個(gè)scoket相關(guān)聯(lián)的context上zmq_term(3)操作的進(jìn)行終結(jié)的結(jié)果。下面簡(jiǎn)述了不同的行為:

屬性值 -1表示無限的停留時(shí)間。還沒被發(fā)送的消息在socket調(diào)用zmq_close()操作之后不會(huì)被丟棄;試圖使用zmq_term()操作對(duì)context進(jìn)行終結(jié)的操作會(huì)被阻塞,直到所有沒有被發(fā)送的消息被發(fā)往對(duì)端為止。

屬性值0 表示沒有停留時(shí)間。當(dāng)使用zmq_close()函數(shù)將socket關(guān)閉的時(shí)候,所有沒有被發(fā)送呃消息都會(huì)被丟棄。

屬性是正數(shù)值表示設(shè)置一個(gè)毫秒為單位的停留時(shí)間。在第socket調(diào)用zmq_close()操作后,還沒有發(fā)送的消息不會(huì)被丟棄;試圖使用zmq_term()對(duì)于此scoket相關(guān)聯(lián)的context進(jìn)行終結(jié)的時(shí)候會(huì)被阻塞,直到所有未被發(fā)送的消息都被發(fā)往對(duì)端;或者停留時(shí)間已經(jīng)到達(dá),此時(shí)所有未發(fā)送的消息都會(huì)被丟棄。

屬性值的類型

int

屬性值的單位

毫秒

默認(rèn)值

-1

可以應(yīng)用的socket類型

所有類型

ZMQ_RECONNECT_IVL:設(shè)置重連間隔

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

ZMQ中的重連間隔可能是個(gè)隨機(jī)的較大數(shù)值,以防在拓?fù)浣Y(jié)構(gòu)中重連風(fēng)暴的發(fā)生。

屬性值的類型

int

屬性值的單位

毫秒

默認(rèn)值

100

可以應(yīng)用的socket類型

當(dāng)使用面向連接的傳輸方式時(shí),所有類型

ZMQ_RECONNECT_IVL_MAX:設(shè)置重連間隔的最大值

ZMQ_RECONNECT_IVL_MAX屬性會(huì)設(shè)置指定的scoket的重連間隔最大值。這是在ZMQ重連周期之間的最大值。在每次的重連企圖中,重連間隔值都會(huì)是前一次的兩倍,知道達(dá)到ZMQ_RECONNECT_IVL_MAX值。這允許指數(shù)補(bǔ)償策略。默認(rèn)值表示不執(zhí)行指數(shù)補(bǔ)償策略,并且重連間隔時(shí)間只基于ZMQ_RECONNECT_IVL進(jìn)行計(jì)算。

屬性值的類型

int

屬性值的單位

毫秒

默認(rèn)值

0(只使用ZMQ_RECONNECT_IVL)

可以應(yīng)用的socket類型

當(dāng)使用面向連接的傳輸方式時(shí),所有類型

ZMQ_BACKLOG:設(shè)置向外發(fā)起的連接隊(duì)列的最大長(zhǎng)度

ZMQ_BACKLOG屬性會(huì)設(shè)置指定的socket的每一個(gè)向外連接隊(duì)列的最大長(zhǎng)度;這只對(duì)面向連接的傳輸方式起作用。要查看更多細(xì)節(jié)請(qǐng)查看你的操作系統(tǒng)的文檔中l(wèi)isten函數(shù)。

屬性值的類型

int

屬性值的單位

連接

默認(rèn)值

1000

可以應(yīng)用的socket類型

當(dāng)使用面向連接的傳輸方式時(shí),所有類型

ZMQ_MAXMSGSIZE:可接受的最大進(jìn)入消息的大小

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

屬性值的類型

int64_t

屬性值的單位

B(字節(jié))

默認(rèn)值

-1

可以應(yīng)用的socket類型

所有類型

ZMQ_MULTICAST_HOPS:多播數(shù)據(jù)包時(shí)候的最大網(wǎng)絡(luò)中繼

設(shè)置從這個(gè)socket發(fā)送出去的多播數(shù)據(jù)包的存活時(shí)間默認(rèn)值是1,表示這個(gè)多播包不能離開本地網(wǎng)絡(luò)。

屬性值的類型

int

屬性值的單位

網(wǎng)絡(luò)中繼數(shù)

默認(rèn)值

1

可以應(yīng)用的socket類型

當(dāng)使用面向連接的傳輸方式時(shí),所有類型

ZMQ_RCVTIMEO:在一個(gè)recv操作返回EAGAIN錯(cuò)誤前的最大時(shí)間

設(shè)置socket的接收操作超時(shí)時(shí)間。如果屬性值是0,zmq_recv(3)函數(shù)將會(huì)立刻返回,如果沒有接收到任何消息,將會(huì)返回EAGAIN錯(cuò)誤。如果屬性值是 -1,將會(huì)阻塞,直到接收到消息為止。對(duì)于任何其它值,都會(huì)進(jìn)行等待這么多時(shí)間,直到返回EAGAIN錯(cuò)誤。

屬性值的類型

int

屬性值的單位

毫秒

默認(rèn)值

-1(無限等待)

可以應(yīng)用的socket類型

所有類型

ZMQ_SNDTIMEO:在一個(gè)發(fā)送操作返回EAGAIN之前等待的最大時(shí)間

設(shè)置指定socket的發(fā)送超時(shí)。如果屬性值是0,zmq_send(3)函數(shù)會(huì)立即返回,如果無法發(fā)送此消息,則返回EAGAIN錯(cuò)誤值。如果屬性值是 -1,那么在消息發(fā)送之前會(huì)進(jìn)入阻塞模式。對(duì)于所有其它的值,將會(huì)在超時(shí)時(shí)間內(nèi)進(jìn)行嘗試發(fā)送消息,超時(shí)后返回EAGAIN錯(cuò)誤。

屬性值的類型

int

屬性值的單位

毫秒

默認(rèn)值

-1(無限等待)

可以應(yīng)用的socket類型

所有類型

ZMQ_IPV6:在socket上允許使用IPv6

設(shè)置此socket的IPv6屬性。屬性值是1表示IPv6在此socket上可以使用,而屬性值是0表示此socket上只能使用IPv4。當(dāng)socket上允許使用IPv6的時(shí)候,這個(gè)scoket可以IPv4或者IPv6進(jìn)行連接或者接受連接。

屬性值的類型

int

屬性值的單位

布爾

默認(rèn)值

0(false)

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_IPV4ONLY:在socket上只使用IPv4

設(shè)置只使用IPv4屬性。不贊成使用這個(gè)屬性。請(qǐng)使用ZMQ_IPV6屬性。

屬性值的類型

int

屬性值的單位

布爾

默認(rèn)值

1(true)

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_IMMEDIATE:隊(duì)列消息只作用于已完成的鏈接

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

屬性值的類型

int

屬性值的單位

布爾

默認(rèn)值

0(false)

可以應(yīng)用的socket類型

當(dāng)使用面向連接的時(shí)候,所有類型可用

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

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

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_ROUTER

ZMQ_ROUTER_MANDATORY:在ROUTER socket上只接收可以進(jìn)行路由的消息

設(shè)置ROUTER socket收到無法路由的消息時(shí)的行為。默認(rèn)屬性值是0,表示會(huì)靜默的丟棄不能路由到的消息。屬性值是1時(shí),如果消息不能路由,會(huì)返回一個(gè)EHOSTUNREACH錯(cuò)誤代碼。

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_ROUTER

ZMQ_ROUTER_RAW:轉(zhuǎn)換ROUTER socket到原始模式

當(dāng)設(shè)置為1的時(shí)候,及把ROUTER 設(shè)置為原始模式。當(dāng)ROUTER為原始模式并且在使用tcp://傳輸方式的時(shí)候,將不會(huì)以ZMQ格式讀取和寫入TCP數(shù)據(jù)。這就使ZMQ應(yīng)用程序可以和非ZMQ程序進(jìn)行交流。當(dāng)使用原始模式的時(shí)候,你不能使用明確的身份ID,并且在發(fā)送消息的時(shí)候ZMQ_MSGMORE標(biāo)志也會(huì)被忽略。在原始模式下,你可以采用在發(fā)送了一個(gè)明確的身份ID后,緊跟著發(fā)送一個(gè)空消息來關(guān)閉一個(gè)指定的連接。

不建議使用這個(gè)選項(xiàng),請(qǐng)使用ZMQ_STREAM 類型的socket來代替。

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_ROUTER

ZMQ_PROBE_ROUTER:ROUTER socket 的引導(dǎo)連接

當(dāng)次屬性設(shè)置為1的時(shí)候,如果有閑的連接建立了或者接受了新的連接,這個(gè)scoket就會(huì)自動(dòng)發(fā)送一個(gè)空的消息。你可以在連接到ROUTER socket的REQ、DEALER或者ROUTER socket上設(shè)置這個(gè)屬性。這些應(yīng)用程序必須能夠區(qū)分這個(gè)空消息。ZMQ_PROBE_ROUTER屬性實(shí)際上給ROUTER應(yīng)用程序提供了一個(gè)信號(hào)信號(hào),說明一個(gè)新的對(duì)端活著。

不要在一個(gè)向任何socket類型進(jìn)行會(huì)話的socket上設(shè)置此屬性:結(jié)果是未知的。

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_ROUTER,ZMQ_DEALER,ZMQ_REQ

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

設(shè)置XPUB socket在新的訂閱和取消訂閱時(shí)的行為。默認(rèn)屬性值是0,并且只允許新的訂閱消息通過傳輸?shù)缴嫌巍傩灾凳?表示允許所有的訂閱信息通過傳輸?shù)缴嫌巍?/p>

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_XPUB

ZMQ_REQ_CORRELATE:匹配請(qǐng)求回復(fù)

REQ scoket的默認(rèn)行為是依靠消息的次序進(jìn)行請(qǐng)求和回復(fù)的匹配,并且這種方式一般情況下也是足夠用的。當(dāng)這個(gè)屬性值設(shè)置成1的時(shí)候,REQ socket 會(huì)在向外發(fā)送的消息前面加上一個(gè)請(qǐng)求ID幀前綴。這就意味著整個(gè)消息的結(jié)構(gòu)是(請(qǐng)求ID,0,用戶幀)。REQ socket會(huì)丟棄所有不是以這兩個(gè)幀作為開始的消息。

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_REQ

ZMQ_REQ_RELAXED:放松請(qǐng)求和回復(fù)之間嚴(yán)格的輪換

默認(rèn)情況下,REQ socket 不允許在接收到上一個(gè)回復(fù)之前使用zmq_send(3)開始一個(gè)新的請(qǐng)求。當(dāng)這個(gè)屬性值設(shè)置為1的時(shí)候,會(huì)允許發(fā)送另一個(gè)請(qǐng)求,并且結(jié)果是斷開與期望回復(fù)消息端的底層的鏈接,在支持重連的傳輸協(xié)議里,會(huì)觸發(fā)一個(gè)重連的嘗試。請(qǐng)求-回復(fù)狀態(tài)被重置,并且一個(gè)新的請(qǐng)求會(huì)發(fā)送到下一個(gè)可用的對(duì)端上。

如果設(shè)置此屬性值為1,應(yīng)該同時(shí)設(shè)置ZMQ_REQ_CORRELATE可用,以確保對(duì)請(qǐng)求和回復(fù)的正確匹配。否則,如果一個(gè)已經(jīng)被斷開的鏈接發(fā)來一個(gè)遲來的回復(fù),可能會(huì)被認(rèn)作后來的請(qǐng)求的回復(fù)。

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

ZMQ_REQ

ZMQ_TCP_KEEPALIVE:代替SO_KEEPALIVE屬性

代替了SO_KEEPALIVE屬性。默認(rèn)值是 -1,表示跳過所有的重寫操作,并且把這些屬性值交給操作系統(tǒng)。

屬性值的類型

int

屬性值的單位

-1, 0,1

默認(rèn)值

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

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

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

代替TCP_KEEPCNT(有些操作系統(tǒng)上是TCP_KEEPALIVE)屬性(當(dāng)操作系統(tǒng)支持的時(shí)候)。默認(rèn)值是 -1,表示跳過所有的重寫操作,并且把這些屬性值交給操作系統(tǒng)。

屬性值的類型

int

屬性值的單位

-1, ?> 0

默認(rèn)值

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

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_TCP_KEEPALIVE_CNT:代替TCP_KEEPCNT socket屬性

代替TCP_KEEPCNT socket屬性(當(dāng)操作系統(tǒng)支持的時(shí)候)。默認(rèn)值是 -1,表示跳過所有的重寫操作,并且把這些屬性值交給操作系統(tǒng)。

屬性值的類型

int

屬性值的單位

-1,? > 0

默認(rèn)值

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

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_TCP_KEEPALIVE_INTVL:代替TCP_KEEPINTVL socket 屬性

代替TCP_KEEPINTVL socket 屬性(當(dāng)操作系統(tǒng)支持的時(shí)候)。默認(rèn)值是 -1,表示跳過所有的重寫操作,并且把這些屬性值交給操作系統(tǒng)。

屬性值的類型

int

屬性值的單位

-1,? > 0

默認(rèn)值

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

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

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

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

屬性值的類型

二進(jìn)制數(shù)據(jù)

屬性值的單位

N/A

默認(rèn)值

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

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有監(jiān)聽socket

ZMQ_PLAIN_SERVER:設(shè)置PLAIN 服務(wù)的角色

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

屬性值的類型

int

屬性值的單位

0,1

默認(rèn)值

0

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_PLAIN_USERNAME:設(shè)置PLAIN安全方式的用戶名

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

屬性值的類型

特征字符串

屬性值的單位

N/A

默認(rèn)值

不設(shè)置

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_PLAIN_PASSWORD:設(shè)置PLAIN安全方式的密碼

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

屬性值的類型

特征字符串

屬性值的單位

N/A

默認(rèn)值

不設(shè)置

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_CURVE_SERVER:設(shè)置CURVE服務(wù)端角色

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

屬性值的類型

int

屬性值的單位

0, 1

默認(rèn)值

0

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_CURVE_PUBLICKEY:設(shè)置CURVE公鑰

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

屬性值的類型

二進(jìn)制數(shù)據(jù)或者Z85格式的文本字符串

屬性值的單位

32或者40

默認(rèn)值

NULL

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_CURVE_SECRETKEY:設(shè)置CURVE密鑰

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

屬性值的類型

二進(jìn)制數(shù)據(jù)或者Z85格式的文本字符串

屬性值的單位

32或者40

默認(rèn)值

NULL

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_CURVE_SERVERKEY:設(shè)置CURVE服務(wù)端碼

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

屬性值的類型

二進(jìn)制數(shù)據(jù)或者Z85格式的文本字符串

屬性值的單位

32或者40

默認(rèn)值

NULL

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

ZMQ_ZAP_DOMAIN:設(shè)置RFC 27認(rèn)證域

設(shè)置ZAP(ZMQ RFC 27)認(rèn)證域。對(duì)于空的安全方式(默認(rèn)在所有的tcp://連接上),ZAP認(rèn)證只在你設(shè)置一個(gè)非空的域時(shí)起作用。對(duì)于PLAIN和CURVE安全方式,如果有ZAP處理程序存在,總是會(huì)請(qǐng)求ZAP。參見http://rfc.zeromq.org/spec:27?獲取更多細(xì)節(jié)。

屬性值的類型

字符串

屬性值的單位

N/A

默認(rèn)值

不設(shè)置

可以應(yīng)用的socket類型

當(dāng)使用TCP連接的時(shí)候,所有類型可用

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

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

屬性值的類型

int

屬性值的單位

布爾

默認(rèn)值

0(false)

可以應(yīng)用的socket類型

ZMQ_PULL, ZMQ_PUSH, ZMQ_SUB, ZMQ_PUB, ZMQ_DEALER

Return value

如果執(zhí)行成功,zmq_setsockopt()函數(shù)會(huì)返回0。否則會(huì)返回 -1,并且設(shè)置errno為下列定義值中的一個(gè)。

Errors

  EINVAL

    請(qǐng)求的屬性中,屬性名稱為止,或者屬性長(zhǎng)度或者屬性值不可用。

  ETERM

    和指定socket相關(guān)的context已經(jīng)被終結(jié)了

  ENOTSOCK

    參數(shù)提供的socket不可用

  EINTR

    本次操作被信號(hào)中斷了

Example

  在一個(gè)ZMQ_SUB? socket上設(shè)置訂閱消息

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

設(shè)置I/O線程關(guān)聯(lián)

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

總結(jié)

以上是生活随笔為你收集整理的ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。