lib/0mq/error_check.rb in 0mq-0.5.2 vs lib/0mq/error_check.rb in 0mq-0.5.3

- old
+ new

@@ -1,8 +1,35 @@ module ZMQ + # "Native 0MQ error codes" + # Each is defined in zmq.h and is not a standard errno code + # Description for each error code is paraphrased from the zmq man pages + { + :EFSM => "Finite state machine is in the wrong state", + :ENOCOMPATPROTO => "The requested protocol is not compatible", + :ETERM => "The context was terminated", + :EMTHREAD => "No I/O thread is available to accomplish the task", + }.each do |name, message| + klass = Class.new SystemCallError do + define_singleton_method :exception do |*args| + superclass.superclass.singleton_class + .instance_method(:new).bind(self).call(*args).tap { |exc| + exc.define_singleton_method(:message) { message } + exc.define_singleton_method(:to_s) { message } + exc.define_singleton_method(:inspect) { + "#<Errno::#{name}: #{message}>" + } + } + end + end + + klass.const_set :Errno, ZMQ.const_get(name) + Errno.const_set name, klass + end + + # A hash of error number => exception class. # Example: 1 => Errno::EPERM @error_map = Hash.new Errno.constants @@ -14,16 +41,15 @@ # Checks the libzmq global error number and raises it as an exception. # Should be used after calling a libzmq resource that returns -1 on error. # Example: ZMQ.error_check if rc == -1 def self.error_check(adjust_backtrace=false) errno = LibZMQ.zmq_errno - return true if errno == 25 # TODO: What is this for? Remove? backtrace = adjust_backtrace ? caller[0...-2] : caller if @error_map.has_key? errno raise @error_map[errno], '', backtrace else raise SystemCallError, errno.to_s, backtrace end end -end \ No newline at end of file +end