Class: ZMQ::Util
- Inherits:
-
Object
- Object
- ZMQ::Util
- Defined in:
- lib/ffi-rzmq/util.rb
Overview
General utility methods.
Class Method Summary collapse
-
.bind_to_random_tcp_port(host = '127.0.0.1', max_tries = 500) ⇒ Object
Attempts to bind to a random tcp port on
host
up tomax_tries
times. -
.curve_keypair ⇒ Object
Generate and return a CURVE public/private keypair.
-
.errno ⇒ Object
Returns the
errno
as set by the libzmq library. -
.error_check(source, result_code) ⇒ Object
:doc: Called to verify whether there were any errors during operation.
-
.error_string ⇒ Object
Returns a string corresponding to the currently set #errno.
-
.resultcode_ok?(rc) ⇒ Boolean
Returns true when
rc
is greater than or equal to 0, false otherwise.
Class Method Details
.bind_to_random_tcp_port(host = '127.0.0.1', max_tries = 500) ⇒ Object
Attempts to bind to a random tcp port on host
up to max_tries
times. Returns the port number upon success or nil upon failure.
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ffi-rzmq/util.rb', line 51 def self.bind_to_random_tcp_port host = '127.0.0.1', max_tries = 500 tries = 0 rc = -1 while !resultcode_ok?(rc) && tries < max_tries tries += 1 random = random_port rc = socket.bind "tcp://#{host}:#{random}" end resultcode_ok?(rc) ? random : nil end |
.curve_keypair ⇒ Object
Generate and return a CURVE public/private keypair
Raises an error if ZeroMQ is not configured for CURVE connections. Install libsodium if this is the case.
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/ffi-rzmq/util.rb', line 12 def self.curve_keypair public_key = FFI::MemoryPointer.from_string(' ' * 41) private_key = FFI::MemoryPointer.from_string(' ' * 41) rc = LibZMQ.zmq_curve_keypair public_key, private_key if rc < 0 raise NotSupportedError.new "zmq_curve_keypair" , rc, ZMQ::Util.errno, "Rebuild zeromq with libsodium to enable CURVE security options." end [public_key.read_string, private_key.read_string] end |
.errno ⇒ Object
Returns the errno
as set by the libzmq library.
37 38 39 |
# File 'lib/ffi-rzmq/util.rb', line 37 def self.errno LibZMQ.zmq_errno end |
.error_check(source, result_code) ⇒ Object
:doc: Called to verify whether there were any errors during operation. If any are found, raise the appropriate #ZeroMQError.
When no error is found, this method returns true
which is behavior used internally by #send and #recv.
71 72 73 74 75 76 77 78 |
# File 'lib/ffi-rzmq/util.rb', line 71 def self.error_check source, result_code if -1 == result_code raise_error source, result_code end # used by Socket::send/recv, ignored by others true end |
.error_string ⇒ Object
Returns a string corresponding to the currently set #errno. These error strings are defined by libzmq.
44 45 46 |
# File 'lib/ffi-rzmq/util.rb', line 44 def self.error_string LibZMQ.zmq_strerror(errno).read_string end |
.resultcode_ok?(rc) ⇒ Boolean
Returns true when rc
is greater than or equal to 0, false otherwise.
We use the >= test because zmq_poll() returns the number of sockets that had a read or write event triggered. So, a >= 0 result means it succeeded.
31 32 33 |
# File 'lib/ffi-rzmq/util.rb', line 31 def self.resultcode_ok? rc rc >= 0 end |