1package zmq4 2 3/* 4#include <zmq.h> 5#include <stdint.h> 6#include "zmq4.h" 7*/ 8import "C" 9 10import ( 11 "strings" 12 "time" 13 "unsafe" 14) 15 16func (soc *Socket) getString(opt C.int, bufsize int) (string, error) { 17 if !soc.opened { 18 return "", ErrorSocketClosed 19 } 20 value := make([]byte, bufsize) 21 size := C.size_t(bufsize) 22 var i C.int 23 var err error 24 for { 25 i, err = C.zmq4_getsockopt(soc.soc, opt, unsafe.Pointer(&value[0]), &size) 26 if i == 0 || !soc.ctx.retry(err) { 27 break 28 } 29 } 30 if i != 0 { 31 return "", errget(err) 32 } 33 return strings.TrimRight(string(value[:int(size)]), "\x00"), nil 34} 35 36func (soc *Socket) getStringRaw(opt C.int, bufsize int) (string, error) { 37 if !soc.opened { 38 return "", ErrorSocketClosed 39 } 40 value := make([]byte, bufsize) 41 size := C.size_t(bufsize) 42 var i C.int 43 var err error 44 for { 45 i, err = C.zmq4_getsockopt(soc.soc, opt, unsafe.Pointer(&value[0]), &size) 46 if i == 0 || !soc.ctx.retry(err) { 47 break 48 } 49 } 50 if i != 0 { 51 return "", errget(err) 52 } 53 return string(value[:int(size)]), nil 54} 55 56func (soc *Socket) getInt(opt C.int) (int, error) { 57 if !soc.opened { 58 return 0, ErrorSocketClosed 59 } 60 value := C.int(0) 61 size := C.size_t(unsafe.Sizeof(value)) 62 var i C.int 63 var err error 64 for { 65 i, err = C.zmq4_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size) 66 if i == 0 || !soc.ctx.retry(err) { 67 break 68 } 69 } 70 if i != 0 { 71 return 0, errget(err) 72 } 73 return int(value), nil 74} 75 76func (soc *Socket) getInt64(opt C.int) (int64, error) { 77 if !soc.opened { 78 return 0, ErrorSocketClosed 79 } 80 value := C.int64_t(0) 81 size := C.size_t(unsafe.Sizeof(value)) 82 var i C.int 83 var err error 84 for { 85 i, err = C.zmq4_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size) 86 if i == 0 || !soc.ctx.retry(err) { 87 break 88 } 89 } 90 if i != 0 { 91 return 0, errget(err) 92 } 93 return int64(value), nil 94} 95 96func (soc *Socket) getUInt64(opt C.int) (uint64, error) { 97 if !soc.opened { 98 return 0, ErrorSocketClosed 99 } 100 value := C.uint64_t(0) 101 size := C.size_t(unsafe.Sizeof(value)) 102 var i C.int 103 var err error 104 for { 105 i, err = C.zmq4_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size) 106 if i == 0 || !soc.ctx.retry(err) { 107 break 108 } 109 } 110 if i != 0 { 111 return 0, errget(err) 112 } 113 return uint64(value), nil 114} 115 116// ZMQ_TYPE: Retrieve socket type 117// 118// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc43 119func (soc *Socket) GetType() (Type, error) { 120 v, err := soc.getInt(C.ZMQ_TYPE) 121 return Type(v), err 122} 123 124// ZMQ_RCVMORE: More message data parts to follow 125// 126// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc30 127func (soc *Socket) GetRcvmore() (bool, error) { 128 v, err := soc.getInt(C.ZMQ_RCVMORE) 129 return v != 0, err 130} 131 132// ZMQ_SNDHWM: Retrieves high water mark for outbound messages 133// 134// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc36 135func (soc *Socket) GetSndhwm() (int, error) { 136 return soc.getInt(C.ZMQ_SNDHWM) 137} 138 139// ZMQ_RCVHWM: Retrieve high water mark for inbound messages 140// 141// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc29 142func (soc *Socket) GetRcvhwm() (int, error) { 143 return soc.getInt(C.ZMQ_RCVHWM) 144} 145 146// ZMQ_AFFINITY: Retrieve I/O thread affinity 147// 148// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc3 149func (soc *Socket) GetAffinity() (uint64, error) { 150 return soc.getUInt64(C.ZMQ_AFFINITY) 151} 152 153// ZMQ_IDENTITY: Retrieve socket identity 154// 155// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc15 156func (soc *Socket) GetIdentity() (string, error) { 157 return soc.getString(C.ZMQ_IDENTITY, 256) 158} 159 160// ZMQ_RATE: Retrieve multicast data rate 161// 162// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc27 163func (soc *Socket) GetRate() (int, error) { 164 return soc.getInt(C.ZMQ_RATE) 165} 166 167// ZMQ_RECOVERY_IVL: Get multicast recovery interval 168// 169// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc34 170func (soc *Socket) GetRecoveryIvl() (time.Duration, error) { 171 v, err := soc.getInt(C.ZMQ_RECOVERY_IVL) 172 return time.Duration(v) * time.Millisecond, err 173} 174 175// ZMQ_SNDBUF: Retrieve kernel transmit buffer size 176// 177// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc35 178func (soc *Socket) GetSndbuf() (int, error) { 179 return soc.getInt(C.ZMQ_SNDBUF) 180} 181 182// ZMQ_RCVBUF: Retrieve kernel receive buffer size 183// 184// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc28 185func (soc *Socket) GetRcvbuf() (int, error) { 186 return soc.getInt(C.ZMQ_RCVBUF) 187} 188 189// ZMQ_LINGER: Retrieve linger period for socket shutdown 190// 191// Returns time.Duration(-1) for infinite 192// 193// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc20 194func (soc *Socket) GetLinger() (time.Duration, error) { 195 v, err := soc.getInt(C.ZMQ_LINGER) 196 if v < 0 { 197 return time.Duration(-1), err 198 } 199 return time.Duration(v) * time.Millisecond, err 200} 201 202// ZMQ_RECONNECT_IVL: Retrieve reconnection interval 203// 204// Returns time.Duration(-1) for no reconnection 205// 206// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc32 207func (soc *Socket) GetReconnectIvl() (time.Duration, error) { 208 v, err := soc.getInt(C.ZMQ_RECONNECT_IVL) 209 if v < 0 { 210 return time.Duration(-1), err 211 } 212 return time.Duration(v) * time.Millisecond, err 213} 214 215// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval 216// 217// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc33 218func (soc *Socket) GetReconnectIvlMax() (time.Duration, error) { 219 v, err := soc.getInt(C.ZMQ_RECONNECT_IVL_MAX) 220 return time.Duration(v) * time.Millisecond, err 221} 222 223// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections 224// 225// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc4 226func (soc *Socket) GetBacklog() (int, error) { 227 return soc.getInt(C.ZMQ_BACKLOG) 228} 229 230// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size 231// 232// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc21 233func (soc *Socket) GetMaxmsgsize() (int64, error) { 234 return soc.getInt64(C.ZMQ_MAXMSGSIZE) 235} 236 237// ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets 238// 239// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc23 240func (soc *Socket) GetMulticastHops() (int, error) { 241 return soc.getInt(C.ZMQ_MULTICAST_HOPS) 242} 243 244// ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN 245// 246// Returns time.Duration(-1) for infinite 247// 248// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc31 249func (soc *Socket) GetRcvtimeo() (time.Duration, error) { 250 v, err := soc.getInt(C.ZMQ_RCVTIMEO) 251 if v < 0 { 252 return time.Duration(-1), err 253 } 254 return time.Duration(v) * time.Millisecond, err 255} 256 257// ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN 258// 259// Returns time.Duration(-1) for infinite 260// 261// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc37 262func (soc *Socket) GetSndtimeo() (time.Duration, error) { 263 v, err := soc.getInt(C.ZMQ_SNDTIMEO) 264 if v < 0 { 265 return time.Duration(-1), err 266 } 267 return time.Duration(v) * time.Millisecond, err 268} 269 270// ZMQ_IPV6: Retrieve IPv6 socket status 271// 272// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc18 273func (soc *Socket) GetIpv6() (bool, error) { 274 v, err := soc.getInt(C.ZMQ_IPV6) 275 return v != 0, err 276} 277 278// ZMQ_IMMEDIATE: Retrieve attach-on-connect value 279// 280// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc16 281func (soc *Socket) GetImmediate() (bool, error) { 282 v, err := soc.getInt(C.ZMQ_IMMEDIATE) 283 return v != 0, err 284} 285 286// ZMQ_FD: Retrieve file descriptor associated with the socket 287// see socketget_unix.go and socketget_windows.go 288 289// ZMQ_EVENTS: Retrieve socket event state 290// 291// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc8 292func (soc *Socket) GetEvents() (State, error) { 293 v, err := soc.getInt(C.ZMQ_EVENTS) 294 return State(v), err 295} 296 297// ZMQ_LAST_ENDPOINT: Retrieve the last endpoint set 298// 299// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc19 300func (soc *Socket) GetLastEndpoint() (string, error) { 301 return soc.getString(C.ZMQ_LAST_ENDPOINT, 1024) 302} 303 304// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option 305// 306// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc38 307func (soc *Socket) GetTcpKeepalive() (int, error) { 308 return soc.getInt(C.ZMQ_TCP_KEEPALIVE) 309} 310 311// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS) 312// 313// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc40 314func (soc *Socket) GetTcpKeepaliveIdle() (int, error) { 315 return soc.getInt(C.ZMQ_TCP_KEEPALIVE_IDLE) 316} 317 318// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option 319// 320// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc39 321func (soc *Socket) GetTcpKeepaliveCnt() (int, error) { 322 return soc.getInt(C.ZMQ_TCP_KEEPALIVE_CNT) 323} 324 325// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option 326// 327// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc41 328func (soc *Socket) GetTcpKeepaliveIntvl() (int, error) { 329 return soc.getInt(C.ZMQ_TCP_KEEPALIVE_INTVL) 330} 331 332// ZMQ_MECHANISM: Retrieve current security mechanism 333// 334// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc22 335func (soc *Socket) GetMechanism() (Mechanism, error) { 336 v, err := soc.getInt(C.ZMQ_MECHANISM) 337 return Mechanism(v), err 338} 339 340// ZMQ_PLAIN_SERVER: Retrieve current PLAIN server role 341// 342// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc25 343func (soc *Socket) GetPlainServer() (int, error) { 344 return soc.getInt(C.ZMQ_PLAIN_SERVER) 345} 346 347// ZMQ_PLAIN_USERNAME: Retrieve current PLAIN username 348// 349// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc26 350func (soc *Socket) GetPlainUsername() (string, error) { 351 s, err := soc.getString(C.ZMQ_PLAIN_USERNAME, 1024) 352 if n := len(s); n > 0 && s[n-1] == 0 { 353 s = s[:n-1] 354 } 355 return s, err 356} 357 358// ZMQ_PLAIN_PASSWORD: Retrieve current password 359// 360// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc24 361func (soc *Socket) GetPlainPassword() (string, error) { 362 s, err := soc.getString(C.ZMQ_PLAIN_PASSWORD, 1024) 363 if n := len(s); n > 0 && s[n-1] == 0 { 364 s = s[:n-1] 365 } 366 return s, err 367} 368 369// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key 370// 371// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc5 372func (soc *Socket) GetCurvePublickeyRaw() (string, error) { 373 return soc.getStringRaw(C.ZMQ_CURVE_PUBLICKEY, 32) 374} 375 376// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key 377// 378// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc5 379func (soc *Socket) GetCurvePublickeykeyZ85() (string, error) { 380 return soc.getString(C.ZMQ_CURVE_PUBLICKEY, 41) 381} 382 383// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key 384// 385// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc6 386func (soc *Socket) GetCurveSecretkeyRaw() (string, error) { 387 return soc.getStringRaw(C.ZMQ_CURVE_SECRETKEY, 32) 388} 389 390// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key 391// 392// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc6 393func (soc *Socket) GetCurveSecretkeyZ85() (string, error) { 394 return soc.getString(C.ZMQ_CURVE_SECRETKEY, 41) 395} 396 397// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key 398// 399// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc7 400func (soc *Socket) GetCurveServerkeyRaw() (string, error) { 401 return soc.getStringRaw(C.ZMQ_CURVE_SERVERKEY, 32) 402} 403 404// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key 405// 406// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc7 407func (soc *Socket) GetCurveServerkeyZ85() (string, error) { 408 return soc.getString(C.ZMQ_CURVE_SERVERKEY, 41) 409} 410 411// ZMQ_ZAP_DOMAIN: Retrieve RFC 27 authentication domain 412// 413// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc44 414func (soc *Socket) GetZapDomain() (string, error) { 415 return soc.getString(C.ZMQ_ZAP_DOMAIN, 1024) 416} 417 418//////////////////////////////////////////////////////////////// 419// 420// New in ZeroMQ 4.1.0 421// 422//////////////////////////////////////////////////////////////// 423// 424// + : yes 425// D : deprecated 426// o : setsockopt only 427// implemented documented test 428// ZMQ_ROUTER_HANDOVER o 429// ZMQ_TOS + + 430// ZMQ_IPC_FILTER_PID D 431// ZMQ_IPC_FILTER_UID D 432// ZMQ_IPC_FILTER_GID D 433// ZMQ_CONNECT_RID o 434// ZMQ_GSSAPI_SERVER + + 435// ZMQ_GSSAPI_PRINCIPAL + + 436// ZMQ_GSSAPI_SERVICE_PRINCIPAL + + 437// ZMQ_GSSAPI_PLAINTEXT + + 438// ZMQ_HANDSHAKE_IVL + + 439// ZMQ_SOCKS_PROXY + 440// ZMQ_XPUB_NODROP o? 441// 442//////////////////////////////////////////////////////////////// 443 444// ZMQ_TOS: Retrieve the Type-of-Service socket override status 445// 446// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 447// 448// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc42 449func (soc *Socket) GetTos() (int, error) { 450 if minor < 1 { 451 return 0, ErrorNotImplemented41 452 } 453 return soc.getInt(C.ZMQ_TOS) 454} 455 456// ZMQ_CONNECT_RID: SET ONLY 457 458// ZMQ_GSSAPI_SERVER: Retrieve current GSSAPI server role 459// 460// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 461// 462// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc12 463func (soc *Socket) GetGssapiServer() (bool, error) { 464 if minor < 1 { 465 return false, ErrorNotImplemented41 466 } 467 v, err := soc.getInt(C.ZMQ_GSSAPI_SERVER) 468 return v != 0, err 469} 470 471// ZMQ_GSSAPI_PRINCIPAL: Retrieve the name of the GSSAPI principal 472// 473// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 474// 475// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc11 476func (soc *Socket) GetGssapiPrincipal() (string, error) { 477 if minor < 1 { 478 return "", ErrorNotImplemented41 479 } 480 return soc.getString(C.ZMQ_GSSAPI_PRINCIPAL, 1024) 481} 482 483// ZMQ_GSSAPI_SERVICE_PRINCIPAL: Retrieve the name of the GSSAPI service principal 484// 485// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 486// 487// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc13 488func (soc *Socket) GetGssapiServicePrincipal() (string, error) { 489 if minor < 1 { 490 return "", ErrorNotImplemented41 491 } 492 return soc.getString(C.ZMQ_GSSAPI_SERVICE_PRINCIPAL, 1024) 493} 494 495// ZMQ_GSSAPI_PLAINTEXT: Retrieve GSSAPI plaintext or encrypted status 496// 497// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 498// 499// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc10 500func (soc *Socket) GetGssapiPlaintext() (bool, error) { 501 if minor < 1 { 502 return false, ErrorNotImplemented41 503 } 504 v, err := soc.getInt(C.ZMQ_GSSAPI_PLAINTEXT) 505 return v != 0, err 506} 507 508// ZMQ_HANDSHAKE_IVL: Retrieve maximum handshake interval 509// 510// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 511// 512// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc14 513func (soc *Socket) GetHandshakeIvl() (time.Duration, error) { 514 if minor < 1 { 515 return time.Duration(0), ErrorNotImplemented41 516 } 517 v, err := soc.getInt(C.ZMQ_HANDSHAKE_IVL) 518 return time.Duration(v) * time.Millisecond, err 519} 520 521// ZMQ_SOCKS_PROXY: NOT DOCUMENTED 522// 523// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 524// 525func (soc *Socket) GetSocksProxy() (string, error) { 526 if minor < 1 { 527 return "", ErrorNotImplemented41 528 } 529 return soc.getString(C.ZMQ_SOCKS_PROXY, 1024) 530} 531 532// ZMQ_XPUB_NODROP: SET ONLY? (not documented) 533 534//////////////////////////////////////////////////////////////// 535// 536// New in ZeroMQ 4.2.0 537// 538//////////////////////////////////////////////////////////////// 539// 540// + : yes 541// o : setsockopt only 542// implemented documented test 543// ZMQ_BLOCKY 544// ZMQ_XPUB_MANUAL o 545// ZMQ_XPUB_WELCOME_MSG o 546// ZMQ_STREAM_NOTIFY o 547// ZMQ_INVERT_MATCHING + + 548// ZMQ_HEARTBEAT_IVL o 549// ZMQ_HEARTBEAT_TTL o 550// ZMQ_HEARTBEAT_TIMEOUT o 551// ZMQ_XPUB_VERBOSER o 552// ZMQ_CONNECT_TIMEOUT + + 553// ZMQ_TCP_MAXRT + + 554// ZMQ_THREAD_SAFE + + 555// ZMQ_MULTICAST_MAXTPDU + + 556// ZMQ_VMCI_BUFFER_SIZE + + 557// ZMQ_VMCI_BUFFER_MIN_SIZE + + 558// ZMQ_VMCI_BUFFER_MAX_SIZE + + 559// ZMQ_VMCI_CONNECT_TIMEOUT + + 560// ZMQ_USE_FD + + 561// 562//////////////////////////////////////////////////////////////// 563 564// ZMQ_BLOCKY doesn't look like a socket option 565 566// ZMQ_INVERT_MATCHING: Retrieve inverted filtering status 567// 568// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 569// 570// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc18 571func (soc *Socket) GetInvertMatching() (int, error) { 572 if minor < 2 { 573 return 0, ErrorNotImplemented42 574 } 575 return soc.getInt(C.ZMQ_INVERT_MATCHING) 576} 577 578// ZMQ_CONNECT_TIMEOUT: Retrieve connect() timeout 579// 580// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 581// 582// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc5 583func (soc *Socket) GetConnectTimeout() (time.Duration, error) { 584 if minor < 2 { 585 return time.Duration(0), ErrorNotImplemented42 586 } 587 v, err := soc.getInt(C.ZMQ_CONNECT_TIMEOUT) 588 return time.Duration(v) * time.Millisecond, err 589} 590 591// ZMQ_TCP_MAXRT: Retrieve Max TCP Retransmit Timeout 592// 593// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 594// 595// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc44 596func (soc *Socket) GetTcpMaxrt() (time.Duration, error) { 597 if minor < 2 { 598 return time.Duration(0), ErrorNotImplemented42 599 } 600 v, err := soc.getInt(C.ZMQ_TCP_MAXRT) 601 return time.Duration(v) * time.Millisecond, err 602} 603 604// ZMQ_THREAD_SAFE: Retrieve socket thread safety 605// 606// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 607// 608// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc45 609func (soc *Socket) GetThreadSafe() (bool, error) { 610 if minor < 2 { 611 return false, ErrorNotImplemented42 612 } 613 v, err := soc.getInt(C.ZMQ_THREAD_SAFE) 614 return v != 0, err 615} 616 617// ZMQ_MULTICAST_MAXTPDU: Maximum transport data unit size for multicast packets 618// 619// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 620// 621// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc26 622func (soc *Socket) GetMulticastMaxtpdu() (int, error) { 623 if minor < 2 { 624 return 0, ErrorNotImplemented42 625 } 626 return soc.getInt(C.ZMQ_MULTICAST_MAXTPDU) 627} 628 629// ZMQ_VMCI_BUFFER_SIZE: Retrieve buffer size of the VMCI socket 630// 631// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 632// 633// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc49 634func (soc *Socket) GetVmciBufferSize() (uint64, error) { 635 if minor < 2 { 636 return 0, ErrorNotImplemented42 637 } 638 return soc.getUInt64(C.ZMQ_VMCI_BUFFER_SIZE) 639} 640 641// ZMQ_VMCI_BUFFER_MIN_SIZE: Retrieve min buffer size of the VMCI socket 642// 643// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 644// 645// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc50 646func (soc *Socket) GetVmciBufferMinSize() (uint64, error) { 647 if minor < 2 { 648 return 0, ErrorNotImplemented42 649 } 650 return soc.getUInt64(C.ZMQ_VMCI_BUFFER_MIN_SIZE) 651} 652 653// ZMQ_VMCI_BUFFER_MAX_SIZE: Retrieve max buffer size of the VMCI socket 654// 655// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 656// 657// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc51 658func (soc *Socket) GetVmciBufferMaxSize() (uint64, error) { 659 if minor < 2 { 660 return 0, ErrorNotImplemented42 661 } 662 return soc.getUInt64(C.ZMQ_VMCI_BUFFER_MAX_SIZE) 663} 664 665// ZMQ_VMCI_CONNECT_TIMEOUT: Retrieve connection timeout of the VMCI socket 666// 667// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 668// 669// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc52 670func (soc *Socket) GetVmciConnectTimeout() (time.Duration, error) { 671 if minor < 2 { 672 return time.Duration(0), ErrorNotImplemented42 673 } 674 v, err := soc.getInt(C.ZMQ_VMCI_CONNECT_TIMEOUT) 675 return time.Duration(v) * time.Millisecond, err 676} 677 678// ZMQ_USE_FD: Retrieve the pre-allocated socket file descriptor 679// 680// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 681// 682// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc29 683func (soc *Socket) Getusefd() (int, error) { 684 if minor < 2 { 685 return 0, ErrorNotImplemented42 686 } 687 return soc.getInt(C.ZMQ_USE_FD) 688} 689