class CZTop::ZsockOptions::OptionsAccessor
Used to access the options of a {Socket} or {Actor}.
Constants
- MECHANISMS
supported security mechanisms and their macro value equivalent
Attributes
@return [Socket, Actor] whose options this {OptionsAccessor} instance
is accessing
Public Class Methods
@param zocket [Socket, Actor]
# File lib/cztop/zsock_options.rb, line 46 def initialize(zocket) @zocket = zocket end
Public Instance Methods
@return [String] Z85
encoded public key set @return [nil] if the current mechanism isn't CURVE or CURVE isn't
supported
# File lib/cztop/zsock_options.rb, line 162 def CURVE_publickey CURVE_key(:curve_publickey) end
@return [String] Z85
encoded secret key set @return [nil] if the current mechanism isn't CURVE or CURVE isn't
supported
# File lib/cztop/zsock_options.rb, line 155 def CURVE_secretkey CURVE_key(:curve_secretkey) end
Make this zocket a CURVE server. @param bool [Boolean] @note You'll have to use a {CZTop::Authenticator}.
# File lib/cztop/zsock_options.rb, line 96 def CURVE_server=(bool) Zsock.set_curve_server(@zocket, bool ? 1 : 0) end
@return [Boolean] whether this zocket is a CURVE server
# File lib/cztop/zsock_options.rb, line 91 def CURVE_server?() Zsock.curve_server(@zocket) > 0 end
@return [String] Z85
encoded server key set @return [nil] if the current mechanism isn't CURVE or CURVE isn't
supported
# File lib/cztop/zsock_options.rb, line 103 def CURVE_serverkey CURVE_key(:curve_serverkey) end
Sets the server's public key, so the zocket can authenticate the remote server. @param key [String] Z85
(40 bytes) or binary (32 bytes) server key @raise [ArgumentError] if key has wrong size
# File lib/cztop/zsock_options.rb, line 122 def CURVE_serverkey=(key) case key.bytesize when 40 Zsock.set_curve_serverkey(@zocket, key) when 32 ptr = ::FFI::MemoryPointer.from_string(key) Zsock.set_curve_serverkey_bin(@zocket, ptr) else raise ArgumentError, "invalid server key: %p" % key end end
@return [String] password set for PLAIN mechanism @return [nil] if the current mechanism isn't PLAIN
# File lib/cztop/zsock_options.rb, line 202 def PLAIN_password return nil if mechanism != :PLAIN Zsock.plain_password(@zocket).read_string end
@param password [String] password for PLAIN mechanism
# File lib/cztop/zsock_options.rb, line 207 def PLAIN_password=(password) Zsock.set_plain_password(@zocket, password) end
Make this zocket a PLAIN server. @param bool [Boolean] @note You'll have to use a {CZTop::Authenticator}.
# File lib/cztop/zsock_options.rb, line 185 def PLAIN_server=(bool) Zsock.set_plain_server(@zocket, bool ? 1 : 0) end
@return [Boolean] whether this zocket is a PLAIN server
# File lib/cztop/zsock_options.rb, line 180 def PLAIN_server?() Zsock.plain_server(@zocket) > 0 end
@return [String] username set for PLAIN mechanism @return [nil] if the current mechanism isn't PLAIN
# File lib/cztop/zsock_options.rb, line 191 def PLAIN_username return nil if mechanism != :PLAIN Zsock.plain_username(@zocket).read_string end
@param username [String] username for PLAIN mechanism @note You'll have to use a {CZTop::Authenticator}.
# File lib/cztop/zsock_options.rb, line 197 def PLAIN_username=(username) Zsock.set_plain_username(@zocket, username) end
Fuzzy option getter. This is to make it easier when porting applications from CZMQ libraries to CZTop
. @param option_name [Symbol, String] case insensitive option name @raise [NoMethodError] if option name can't be recognized
# File lib/cztop/zsock_options.rb, line 54 def [](option_name) # NOTE: beware of predicates, especially #CURVE_server? & friends meth = public_methods.reject { |m| m =~ /=$/ } .find { |m| m =~ /^#{option_name}\??$/i } raise NoMethodError, option_name if meth.nil? __send__(meth) end
Fuzzy option setter. This is to make it easier when porting applications from CZMQ libraries to CZTop
. @param option_name [Symbol, String] case insensitive option name @param new_value [String, Integer] new value @raise [NoMethodError] if option name can't be recognized
# File lib/cztop/zsock_options.rb, line 67 def []=(option_name, new_value) meth = public_methods.find { |m| m =~ /^#{option_name}=$/i } raise NoMethodError, option_name if meth.nil? __send__(meth, new_value) end
@return [Integer] socket events (readable/writable) @see CZTop::Poller::ZMQ::POLLIN and CZTop::Poller::ZMQ::POLLOUT
# File lib/cztop/zsock_options.rb, line 320 def events() Zsock.events(@zocket) end
@return [Integer] socket file descriptor
# File lib/cztop/zsock_options.rb, line 316 def fd() Zsock.fd(@zocket) end
@return [Integer] current value of Heartbeat IVL
# File lib/cztop/zsock_options.rb, line 258 def heartbeat_ivl() Zsock.heartbeat_ivl(@zocket) end
@param new_value [Integer] new value for Heartbeat IVL
# File lib/cztop/zsock_options.rb, line 260 def heartbeat_ivl=(new_value) raise ArgumentError, "invalid IVL" unless new_value >= 0 Zsock.set_heartbeat_ivl(@zocket, new_value) end
@return [Integer] current value of Heartbeat Timeout
# File lib/cztop/zsock_options.rb, line 282 def heartbeat_timeout() Zsock.heartbeat_timeout(@zocket) end
@param new_value [Integer] new value for Heartbeat Timeout
# File lib/cztop/zsock_options.rb, line 284 def heartbeat_timeout=(new_value) raise ArgumentError, "invalid timeout" unless new_value >= 0 Zsock.set_heartbeat_timeout(@zocket, new_value) end
@return [Integer] current value of Heartbeat TTL, in milliseconds
# File lib/cztop/zsock_options.rb, line 266 def heartbeat_ttl() Zsock.heartbeat_ttl(@zocket) end
@param new_value [Integer] new value for Heartbeat TTL, in
milliseconds
@note The value will internally be rounded to the nearest decisecond.
So a value of less than 100 will have no effect.
# File lib/cztop/zsock_options.rb, line 271 def heartbeat_ttl=(new_value) unless new_value.is_a? Integer raise ArgumentError, "invalid TTL: #{new_value}" end unless (0..65536).include? new_value raise ArgumentError, "TTL out of range: #{new_value}" end Zsock.set_heartbeat_ttl(@zocket, new_value) end
@return [String] current socket identity
# File lib/cztop/zsock_options.rb, line 239 def identity() Zsock.identity(@zocket).read_string end
@param identity [String] new socket identity @raise [ArgumentError] if identity is invalid
# File lib/cztop/zsock_options.rb, line 242 def identity=(identity) raise ArgumentError, "zero-length identity" if identity.bytesize.zero? raise ArgumentError, "identity too long" if identity.bytesize > 255 raise ArgumentError, "invalid identity" if identity.start_with? "\0" Zsock.set_identity(@zocket, identity) end
Set the IPv6 option for the socket. A value of true means IPv6 is enabled on the socket, while false means the socket will use only IPv4. When IPv6 is enabled the socket will connect to, or accept connections from, both IPv4 and IPv6 hosts. Default is false. @param new_value [Boolean] new value for ipv6
# File lib/cztop/zsock_options.rb, line 311 def ipv6=(new_value) Zsock.set_ipv6(@zocket, new_value ? 1 : 0) end
@return [Boolean] current value of ipv6
# File lib/cztop/zsock_options.rb, line 304 def ipv6?() Zsock.ipv6(@zocket) != 0 end
@return [Integer] current value of LINGER
# File lib/cztop/zsock_options.rb, line 290 def linger() Zsock.linger(@zocket) end
This defines the number of milliseconds to wait while closing/disconnecting a socket if there are outstanding messages to send.
Default is 0, which means to not wait at all. -1 means to wait indefinitely
@param new_value [Integer] new value for LINGER
# File lib/cztop/zsock_options.rb, line 299 def linger=(new_value) Zsock.set_linger(@zocket, new_value) end
@return [Symbol] the current security mechanism in use @note This is automatically set through the use of CURVE certificates,
etc
# File lib/cztop/zsock_options.rb, line 145 def mechanism #int zsock_mechanism (void *self); code = Zsock.mechanism(@zocket) MECHANISMS[code] or raise "unknown ZMQ security mechanism code: %i" % code end
@return [Integer] the receive high water mark
# File lib/cztop/zsock_options.rb, line 82 def rcvhwm() Zsock.rcvhwm(@zocket) end
@param value [Integer] the new receive high water mark
# File lib/cztop/zsock_options.rb, line 84 def rcvhwm=(value) Zsock.set_rcvhwm(@zocket, value) end
@return [Integer] the timeout when receiving a message @see Message.receive_from
# File lib/cztop/zsock_options.rb, line 217 def rcvtimeo() Zsock.rcvtimeo(@zocket) end
@param timeout [Integer] new timeout @see Message.receive_from
# File lib/cztop/zsock_options.rb, line 220 def rcvtimeo=(timeout) Zsock.set_rcvtimeo(@zocket, timeout) end
@return [Integer] current value of RECONNECT_IVL
# File lib/cztop/zsock_options.rb, line 323 def reconnect_ivl() Zsock.reconnect_ivl(@zocket) end
This defines the number of milliseconds to wait while closing/disconnecting a socket if there are outstanding messages to send.
Default is 0, which means to not wait at all. -1 means to wait indefinitely
@param new_value [Integer] new value for RECONNECT_IVL
# File lib/cztop/zsock_options.rb, line 332 def reconnect_ivl=(new_value) Zsock.set_reconnect_ivl(@zocket, new_value) end
Accept only routable messages on ROUTER sockets. Default is off. @param bool [Boolean] whether to error if a message isn't routable
(either if the that peer isn't connected or its SNDHWM is reached)
# File lib/cztop/zsock_options.rb, line 234 def router_mandatory=(bool) Zsock.set_router_mandatory(@zocket, bool ? 1 : 0) end
@return [Integer] the send high water mark
# File lib/cztop/zsock_options.rb, line 78 def sndhwm() Zsock.sndhwm(@zocket) end
@param value [Integer] the new send high water mark.
# File lib/cztop/zsock_options.rb, line 80 def sndhwm=(value) Zsock.set_sndhwm(@zocket, value) end
@return [Integer] the timeout when sending a message @see Message#send_to
# File lib/cztop/zsock_options.rb, line 224 def sndtimeo() Zsock.sndtimeo(@zocket) end
@param timeout [Integer] new timeout @see Message#send_to
# File lib/cztop/zsock_options.rb, line 227 def sndtimeo=(timeout) Zsock.set_sndtimeo(@zocket, timeout) end
@return [Integer] current value of Type of Service
# File lib/cztop/zsock_options.rb, line 250 def tos() Zsock.tos(@zocket) end
@param new_value [Integer] new value for Type of Service
# File lib/cztop/zsock_options.rb, line 252 def tos=(new_value) raise ArgumentError, "invalid TOS" unless new_value >= 0 Zsock.set_tos(@zocket, new_value) end
Gets the ZAP
domain used for authentication. @see rfc.zeromq.org/spec:27 @return [String]
# File lib/cztop/zsock_options.rb, line 169 def zap_domain Zsock.zap_domain(@zocket).read_string end
Private Instance Methods
Get one of the CURVE keys. @param key_name [Symbol] something like :curve_serverkey
@return [String, nil] key, if CURVE is supported and active, or nil
# File lib/cztop/zsock_options.rb, line 110 def CURVE_key(key_name) return nil if mechanism != :CURVE ptr = Zsock.__send__(key_name, @zocket) return nil if ptr.null? ptr.read_string end