mirror of
https://gitee.com/rainbond/Rainbond.git
synced 2024-12-01 19:28:05 +08:00
801 lines
22 KiB
Go
801 lines
22 KiB
Go
package zmq4
|
|
|
|
/*
|
|
#include <zmq.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include "zmq4.h"
|
|
*/
|
|
import "C"
|
|
|
|
import (
|
|
"time"
|
|
"unsafe"
|
|
)
|
|
|
|
func (soc *Socket) setString(opt C.int, s string) error {
|
|
if !soc.opened {
|
|
return ErrorSocketClosed
|
|
}
|
|
cs := C.CString(s)
|
|
defer C.free(unsafe.Pointer(cs))
|
|
if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(cs), C.size_t(len(s))); i != 0 {
|
|
return errget(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (soc *Socket) setNullString(opt C.int) error {
|
|
if !soc.opened {
|
|
return ErrorSocketClosed
|
|
}
|
|
if i, err := C.zmq_setsockopt(soc.soc, opt, nil, 0); i != 0 {
|
|
return errget(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (soc *Socket) setInt(opt C.int, value int) error {
|
|
if !soc.opened {
|
|
return ErrorSocketClosed
|
|
}
|
|
val := C.int(value)
|
|
if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 {
|
|
return errget(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (soc *Socket) setInt64(opt C.int, value int64) error {
|
|
if !soc.opened {
|
|
return ErrorSocketClosed
|
|
}
|
|
val := C.int64_t(value)
|
|
if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 {
|
|
return errget(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (soc *Socket) setUInt64(opt C.int, value uint64) error {
|
|
if !soc.opened {
|
|
return ErrorSocketClosed
|
|
}
|
|
val := C.uint64_t(value)
|
|
if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 {
|
|
return errget(err)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ZMQ_SNDHWM: Set high water mark for outbound messages
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc39
|
|
func (soc *Socket) SetSndhwm(value int) error {
|
|
return soc.setInt(C.ZMQ_SNDHWM, value)
|
|
}
|
|
|
|
// ZMQ_RCVHWM: Set high water mark for inbound messages
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc28
|
|
func (soc *Socket) SetRcvhwm(value int) error {
|
|
return soc.setInt(C.ZMQ_RCVHWM, value)
|
|
}
|
|
|
|
// ZMQ_AFFINITY: Set I/O thread affinity
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc3
|
|
func (soc *Socket) SetAffinity(value uint64) error {
|
|
return soc.setUInt64(C.ZMQ_AFFINITY, value)
|
|
}
|
|
|
|
// ZMQ_SUBSCRIBE: Establish message filter
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc41
|
|
func (soc *Socket) SetSubscribe(filter string) error {
|
|
return soc.setString(C.ZMQ_SUBSCRIBE, filter)
|
|
}
|
|
|
|
// ZMQ_UNSUBSCRIBE: Remove message filter
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc47
|
|
func (soc *Socket) SetUnsubscribe(filter string) error {
|
|
return soc.setString(C.ZMQ_UNSUBSCRIBE, filter)
|
|
}
|
|
|
|
// ZMQ_IDENTITY: Set socket identity
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc16
|
|
func (soc *Socket) SetIdentity(value string) error {
|
|
return soc.setString(C.ZMQ_IDENTITY, value)
|
|
}
|
|
|
|
// ZMQ_RATE: Set multicast data rate
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc26
|
|
func (soc *Socket) SetRate(value int) error {
|
|
return soc.setInt(C.ZMQ_RATE, value)
|
|
}
|
|
|
|
// ZMQ_RECOVERY_IVL: Set multicast recovery interval
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc32
|
|
func (soc *Socket) SetRecoveryIvl(value time.Duration) error {
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_RECOVERY_IVL, val)
|
|
}
|
|
|
|
// ZMQ_SNDBUF: Set kernel transmit buffer size
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc38
|
|
func (soc *Socket) SetSndbuf(value int) error {
|
|
return soc.setInt(C.ZMQ_SNDBUF, value)
|
|
}
|
|
|
|
// ZMQ_RCVBUF: Set kernel receive buffer size
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc27
|
|
func (soc *Socket) SetRcvbuf(value int) error {
|
|
return soc.setInt(C.ZMQ_RCVBUF, value)
|
|
}
|
|
|
|
// ZMQ_LINGER: Set linger period for socket shutdown
|
|
//
|
|
// For infinite, use -1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc19
|
|
func (soc *Socket) SetLinger(value time.Duration) error {
|
|
val := int(value / time.Millisecond)
|
|
if value == -1 {
|
|
val = -1
|
|
}
|
|
return soc.setInt(C.ZMQ_LINGER, val)
|
|
}
|
|
|
|
// ZMQ_RECONNECT_IVL: Set reconnection interval
|
|
//
|
|
// For no reconnection, use -1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc30
|
|
func (soc *Socket) SetReconnectIvl(value time.Duration) error {
|
|
val := int(value / time.Millisecond)
|
|
if value == -1 {
|
|
val = -1
|
|
}
|
|
return soc.setInt(C.ZMQ_RECONNECT_IVL, val)
|
|
}
|
|
|
|
// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc31
|
|
func (soc *Socket) SetReconnectIvlMax(value time.Duration) error {
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_RECONNECT_IVL_MAX, val)
|
|
}
|
|
|
|
// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc4
|
|
func (soc *Socket) SetBacklog(value int) error {
|
|
return soc.setInt(C.ZMQ_BACKLOG, value)
|
|
}
|
|
|
|
// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc20
|
|
func (soc *Socket) SetMaxmsgsize(value int64) error {
|
|
return soc.setInt64(C.ZMQ_MAXMSGSIZE, value)
|
|
}
|
|
|
|
// ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc21
|
|
func (soc *Socket) SetMulticastHops(value int) error {
|
|
return soc.setInt(C.ZMQ_MULTICAST_HOPS, value)
|
|
}
|
|
|
|
// ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN
|
|
//
|
|
// For infinite, use -1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc29
|
|
func (soc *Socket) SetRcvtimeo(value time.Duration) error {
|
|
val := int(value / time.Millisecond)
|
|
if value == -1 {
|
|
val = -1
|
|
}
|
|
return soc.setInt(C.ZMQ_RCVTIMEO, val)
|
|
}
|
|
|
|
// ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN
|
|
//
|
|
// For infinite, use -1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc40
|
|
func (soc *Socket) SetSndtimeo(value time.Duration) error {
|
|
val := int(value / time.Millisecond)
|
|
if value == -1 {
|
|
val = -1
|
|
}
|
|
return soc.setInt(C.ZMQ_SNDTIMEO, val)
|
|
}
|
|
|
|
// ZMQ_IPV6: Enable IPv6 on socket
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc18
|
|
func (soc *Socket) SetIpv6(value bool) error {
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_IPV6, val)
|
|
}
|
|
|
|
// ZMQ_IMMEDIATE: Queue messages only to completed connections
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc17
|
|
func (soc *Socket) SetImmediate(value bool) error {
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_IMMEDIATE, val)
|
|
}
|
|
|
|
// ZMQ_ROUTER_MANDATORY: accept only routable messages on ROUTER sockets
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc36
|
|
func (soc *Socket) SetRouterMandatory(value int) error {
|
|
return soc.setInt(C.ZMQ_ROUTER_MANDATORY, value)
|
|
}
|
|
|
|
// ZMQ_ROUTER_RAW: switch ROUTER socket to raw mode
|
|
//
|
|
// This option is deprecated since ZeroMQ version 4.1, please use ZMQ_STREAM sockets instead.
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc37
|
|
func (soc *Socket) SetRouterRaw(value int) error {
|
|
return soc.setInt(C.ZMQ_ROUTER_RAW, value)
|
|
}
|
|
|
|
// ZMQ_PROBE_ROUTER: bootstrap connections to ROUTER sockets
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc25
|
|
func (soc *Socket) SetProbeRouter(value int) error {
|
|
return soc.setInt(C.ZMQ_PROBE_ROUTER, value)
|
|
}
|
|
|
|
// ZMQ_XPUB_VERBOSE: provide all subscription messages on XPUB sockets
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc48
|
|
func (soc *Socket) SetXpubVerbose(value int) error {
|
|
return soc.setInt(C.ZMQ_XPUB_VERBOSE, value)
|
|
}
|
|
|
|
// ZMQ_REQ_CORRELATE: match replies with requests
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc33
|
|
func (soc *Socket) SetReqCorrelate(value int) error {
|
|
return soc.setInt(C.ZMQ_REQ_CORRELATE, value)
|
|
}
|
|
|
|
// ZMQ_REQ_RELAXED: relax strict alternation between request and reply
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc34
|
|
func (soc *Socket) SetReqRelaxed(value int) error {
|
|
return soc.setInt(C.ZMQ_REQ_RELAXED, value)
|
|
}
|
|
|
|
// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc42
|
|
func (soc *Socket) SetTcpKeepalive(value int) error {
|
|
return soc.setInt(C.ZMQ_TCP_KEEPALIVE, value)
|
|
}
|
|
|
|
// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS)
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc44
|
|
func (soc *Socket) SetTcpKeepaliveIdle(value int) error {
|
|
return soc.setInt(C.ZMQ_TCP_KEEPALIVE_IDLE, value)
|
|
}
|
|
|
|
// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc43
|
|
func (soc *Socket) SetTcpKeepaliveCnt(value int) error {
|
|
return soc.setInt(C.ZMQ_TCP_KEEPALIVE_CNT, value)
|
|
}
|
|
|
|
// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc45
|
|
func (soc *Socket) SetTcpKeepaliveIntvl(value int) error {
|
|
return soc.setInt(C.ZMQ_TCP_KEEPALIVE_INTVL, value)
|
|
}
|
|
|
|
// ZMQ_TCP_ACCEPT_FILTER: Assign filters to allow new TCP connections
|
|
//
|
|
// This option is deprecated since ZeroMQ version 4.1, please use authentication via
|
|
// the ZAP API and IP address whitelisting / blacklisting.
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc50
|
|
func (soc *Socket) SetTcpAcceptFilter(filter string) error {
|
|
if len(filter) == 0 {
|
|
return soc.setNullString(C.ZMQ_TCP_ACCEPT_FILTER)
|
|
}
|
|
return soc.setString(C.ZMQ_TCP_ACCEPT_FILTER, filter)
|
|
}
|
|
|
|
// ZMQ_PLAIN_SERVER: Set PLAIN server role
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc23
|
|
func (soc *Socket) SetPlainServer(value int) error {
|
|
return soc.setInt(C.ZMQ_PLAIN_SERVER, value)
|
|
}
|
|
|
|
// ZMQ_PLAIN_USERNAME: Set PLAIN security username
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc24
|
|
func (soc *Socket) SetPlainUsername(username string) error {
|
|
if len(username) == 0 {
|
|
return soc.setNullString(C.ZMQ_PLAIN_USERNAME)
|
|
}
|
|
return soc.setString(C.ZMQ_PLAIN_USERNAME, username)
|
|
}
|
|
|
|
// ZMQ_PLAIN_PASSWORD: Set PLAIN security password
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc22
|
|
func (soc *Socket) SetPlainPassword(password string) error {
|
|
if len(password) == 0 {
|
|
return soc.setNullString(C.ZMQ_PLAIN_PASSWORD)
|
|
}
|
|
return soc.setString(C.ZMQ_PLAIN_PASSWORD, password)
|
|
}
|
|
|
|
// ZMQ_CURVE_SERVER: Set CURVE server role
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc9
|
|
func (soc *Socket) SetCurveServer(value int) error {
|
|
return soc.setInt(C.ZMQ_CURVE_SERVER, value)
|
|
}
|
|
|
|
// ZMQ_CURVE_PUBLICKEY: Set CURVE public key
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc7
|
|
func (soc *Socket) SetCurvePublickey(key string) error {
|
|
return soc.setString(C.ZMQ_CURVE_PUBLICKEY, key)
|
|
}
|
|
|
|
// ZMQ_CURVE_SECRETKEY: Set CURVE secret key
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc8
|
|
func (soc *Socket) SetCurveSecretkey(key string) error {
|
|
return soc.setString(C.ZMQ_CURVE_SECRETKEY, key)
|
|
}
|
|
|
|
// ZMQ_CURVE_SERVERKEY: Set CURVE server key
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc10
|
|
func (soc *Socket) SetCurveServerkey(key string) error {
|
|
return soc.setString(C.ZMQ_CURVE_SERVERKEY, key)
|
|
}
|
|
|
|
// ZMQ_ZAP_DOMAIN: Set RFC 27 authentication domain
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc49
|
|
func (soc *Socket) SetZapDomain(domain string) error {
|
|
return soc.setString(C.ZMQ_ZAP_DOMAIN, domain)
|
|
}
|
|
|
|
// ZMQ_CONFLATE: Keep only last message
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc6
|
|
func (soc *Socket) SetConflate(value bool) error {
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_CONFLATE, val)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////
|
|
//
|
|
// New in ZeroMQ 4.1.0
|
|
//
|
|
////////////////////////////////////////////////////////////////
|
|
//
|
|
// + : yes
|
|
// D : deprecated
|
|
// implemented documented test
|
|
// ZMQ_ROUTER_HANDOVER + +
|
|
// ZMQ_TOS + +
|
|
// ZMQ_IPC_FILTER_PID D
|
|
// ZMQ_IPC_FILTER_UID D
|
|
// ZMQ_IPC_FILTER_GID D
|
|
// ZMQ_CONNECT_RID + +
|
|
// ZMQ_GSSAPI_SERVER + +
|
|
// ZMQ_GSSAPI_PRINCIPAL + +
|
|
// ZMQ_GSSAPI_SERVICE_PRINCIPAL + +
|
|
// ZMQ_GSSAPI_PLAINTEXT + +
|
|
// ZMQ_HANDSHAKE_IVL + +
|
|
// ZMQ_SOCKS_PROXY +
|
|
// ZMQ_XPUB_NODROP +
|
|
//
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
// ZMQ_ROUTER_HANDOVER: handle duplicate client identities on ROUTER sockets
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc35
|
|
func (soc *Socket) SetRouterHandover(value bool) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_ROUTER_HANDOVER, val)
|
|
}
|
|
|
|
// ZMQ_TOS: Set the Type-of-Service on socket
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc46
|
|
func (soc *Socket) SetTos(value int) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
return soc.setInt(C.ZMQ_TOS, value)
|
|
}
|
|
|
|
// ZMQ_CONNECT_RID: Assign the next outbound connection id
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc5
|
|
func (soc *Socket) SetConnectRid(value string) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
if value == "" {
|
|
return soc.setNullString(C.ZMQ_CONNECT_RID)
|
|
}
|
|
return soc.setString(C.ZMQ_CONNECT_RID, value)
|
|
}
|
|
|
|
// ZMQ_GSSAPI_SERVER: Set GSSAPI server role
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc13
|
|
func (soc *Socket) SetGssapiServer(value bool) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_GSSAPI_SERVER, val)
|
|
}
|
|
|
|
// ZMQ_GSSAPI_PRINCIPAL: Set name of GSSAPI principal
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc12
|
|
func (soc *Socket) SetGssapiPrincipal(value string) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
return soc.setString(C.ZMQ_GSSAPI_PRINCIPAL, value)
|
|
}
|
|
|
|
// ZMQ_GSSAPI_SERVICE_PRINCIPAL: Set name of GSSAPI service principal
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc14
|
|
func (soc *Socket) SetGssapiServicePrincipal(value string) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
return soc.setString(C.ZMQ_GSSAPI_SERVICE_PRINCIPAL, value)
|
|
}
|
|
|
|
// ZMQ_GSSAPI_PLAINTEXT: Disable GSSAPI encryption
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc11
|
|
func (soc *Socket) SetGssapiPlaintext(value bool) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_GSSAPI_PLAINTEXT, val)
|
|
}
|
|
|
|
// ZMQ_HANDSHAKE_IVL: Set maximum handshake interval
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc15
|
|
func (soc *Socket) SetHandshakeIvl(value time.Duration) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_HANDSHAKE_IVL, val)
|
|
}
|
|
|
|
// ZMQ_SOCKS_PROXY: NOT DOCUMENTED
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
func (soc *Socket) SetSocksProxy(value string) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
if value == "" {
|
|
return soc.setNullString(C.ZMQ_SOCKS_PROXY)
|
|
}
|
|
return soc.setString(C.ZMQ_SOCKS_PROXY, value)
|
|
}
|
|
|
|
// Available since ZeroMQ 4.1, documented since ZeroMQ 4.2
|
|
|
|
// ZMQ_XPUB_NODROP: do not silently drop messages if SENDHWM is reached
|
|
//
|
|
// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc60
|
|
func (soc *Socket) SetXpubNodrop(value bool) error {
|
|
if minor < 1 {
|
|
return ErrorNotImplemented41
|
|
}
|
|
val := 0
|
|
if value {
|
|
val = 1
|
|
}
|
|
return soc.setInt(C.ZMQ_XPUB_NODROP, val)
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////
|
|
//
|
|
// New in ZeroMQ 4.2.0
|
|
//
|
|
////////////////////////////////////////////////////////////////
|
|
//
|
|
// + : yes
|
|
// o : getsockopt only
|
|
// implemented documented test
|
|
// ZMQ_BLOCKY
|
|
// ZMQ_XPUB_MANUAL + +
|
|
// ZMQ_XPUB_WELCOME_MSG + +
|
|
// ZMQ_STREAM_NOTIFY + +
|
|
// ZMQ_INVERT_MATCHING + +
|
|
// ZMQ_HEARTBEAT_IVL + +
|
|
// ZMQ_HEARTBEAT_TTL + +
|
|
// ZMQ_HEARTBEAT_TIMEOUT + +
|
|
// ZMQ_XPUB_VERBOSER + +
|
|
// ZMQ_CONNECT_TIMEOUT + +
|
|
// ZMQ_TCP_MAXRT + +
|
|
// ZMQ_THREAD_SAFE o
|
|
// ZMQ_MULTICAST_MAXTPDU + +
|
|
// ZMQ_VMCI_BUFFER_SIZE + +
|
|
// ZMQ_VMCI_BUFFER_MIN_SIZE + +
|
|
// ZMQ_VMCI_BUFFER_MAX_SIZE + +
|
|
// ZMQ_VMCI_CONNECT_TIMEOUT + +
|
|
// ZMQ_USE_FD + +
|
|
//
|
|
////////////////////////////////////////////////////////////////
|
|
|
|
// ZMQ_XPUB_MANUAL: change the subscription handling to manual
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc59
|
|
func (soc *Socket) SetXpubManual(value int) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setInt(C.ZMQ_XPUB_MANUAL, value)
|
|
}
|
|
|
|
// ZMQ_XPUB_WELCOME_MSG: set welcome message that will be received by subscriber when connecting
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc61
|
|
func (soc *Socket) SetXpubWelcomeMsg(value string) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
if value == "" {
|
|
return soc.setNullString(C.ZMQ_XPUB_WELCOME_MSG)
|
|
}
|
|
return soc.setString(C.ZMQ_XPUB_WELCOME_MSG, value)
|
|
}
|
|
|
|
// ZMQ_STREAM_NOTIFY: send connect and disconnect notifications
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc48
|
|
func (soc *Socket) SetStreamNotify(value int) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setInt(C.ZMQ_STREAM_NOTIFY, value)
|
|
}
|
|
|
|
// ZMQ_INVERT_MATCHING: Invert message filtering
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc22
|
|
func (soc *Socket) SetInvertMatching(value int) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setInt(C.ZMQ_INVERT_MATCHING, value)
|
|
}
|
|
|
|
// ZMQ_HEARTBEAT_IVL: Set interval between sending ZMTP heartbeats
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc17
|
|
func (soc *Socket) SetHeartbeatIvl(value time.Duration) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_HEARTBEAT_IVL, val)
|
|
}
|
|
|
|
// ZMQ_HEARTBEAT_TTL: Set the TTL value for ZMTP heartbeats
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc19
|
|
func (soc *Socket) SetHeartbeatTtl(value time.Duration) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_HEARTBEAT_TTL, val)
|
|
}
|
|
|
|
// ZMQ_HEARTBEAT_TIMEOUT: Set timeout for ZMTP heartbeats
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc18
|
|
func (soc *Socket) SetHeartbeatTimeout(value time.Duration) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_HEARTBEAT_TIMEOUT, val)
|
|
}
|
|
|
|
// ZMQ_XPUB_VERBOSER: pass subscribe and unsubscribe messages on XPUB socket
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc58
|
|
func (soc *Socket) SetXpubVerboser(value int) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setInt(C.ZMQ_XPUB_VERBOSER, value)
|
|
}
|
|
|
|
// ZMQ_CONNECT_TIMEOUT: Set connect() timeout
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc7
|
|
func (soc *Socket) SetConnectTimeout(value time.Duration) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_CONNECT_TIMEOUT, val)
|
|
}
|
|
|
|
// ZMQ_TCP_MAXRT: Set TCP Maximum Retransmit Timeout
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc54
|
|
func (soc *Socket) SetTcpMaxrt(value time.Duration) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_TCP_MAXRT, val)
|
|
}
|
|
|
|
// ZMQ_MULTICAST_MAXTPDU: Maximum transport data unit size for multicast packets
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc27
|
|
func (soc *Socket) SetMulticastMaxtpdu(value int) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setInt(C.ZMQ_MULTICAST_MAXTPDU, value)
|
|
}
|
|
|
|
// ZMQ_VMCI_BUFFER_SIZE: Set buffer size of the VMCI socket
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc68
|
|
func (soc *Socket) SetVmciBufferSize(value uint64) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setUInt64(C.ZMQ_VMCI_BUFFER_SIZE, value)
|
|
}
|
|
|
|
// ZMQ_VMCI_BUFFER_MIN_SIZE: Set min buffer size of the VMCI socket
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc69
|
|
func (soc *Socket) SetVmciBufferMinSize(value uint64) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setUInt64(C.ZMQ_VMCI_BUFFER_MIN_SIZE, value)
|
|
}
|
|
|
|
// ZMQ_VMCI_BUFFER_MAX_SIZE: Set max buffer size of the VMCI socket
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc70
|
|
func (soc *Socket) SetVmciBufferMaxSize(value uint64) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setUInt64(C.ZMQ_VMCI_BUFFER_MAX_SIZE, value)
|
|
}
|
|
|
|
// ZMQ_VMCI_CONNECT_TIMEOUT: Set connection timeout of the VMCI socket
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc71
|
|
func (soc *Socket) SetVmciConnectTimeout(value time.Duration) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
val := int(value / time.Millisecond)
|
|
return soc.setInt(C.ZMQ_VMCI_CONNECT_TIMEOUT, val)
|
|
}
|
|
|
|
// ZMQ_USE_FD: Set the pre-allocated socket file descriptor
|
|
//
|
|
// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2
|
|
//
|
|
// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc31
|
|
func (soc *Socket) SetUseFd(value int) error {
|
|
if minor < 2 {
|
|
return ErrorNotImplemented42
|
|
}
|
|
return soc.setInt(C.ZMQ_USE_FD, value)
|
|
}
|