def withReadFiber(ioInfo)
      if ioInfo.readFiber.nil? || ! ioInfo.readFiber.alive?
        ioInfo.readFiber = Fiber.new do |ioInfo|
          yield ioInfo.readFiberIoFacade
        end
      end     
  
      # Allow handler to read some data.
      # This call will return either if:
      #  1. the handler needs more data but it isn't available yet,
      #  2. if it's read all the data it wanted to read for the current message it's building
      #  3. if a read error occurred.
      #
      # In case 2 the latter case the fiber will be dead. In cases 1 and 2, we should select on the socket
      # until data is ready. For case 3, the state of the ioInfo is set to error and the io should be 
      # removed. 
      ioInfo.readFiber.resume(ioInfo)
      if ioInfo.state == :error
        @currentHandlerCallback = :error
        @handler.error(ioInfo.metainfo, ioInfo.lastReadError)
        disposeIo(ioInfo)
      end
      
    end
def withReadFiber(ioInfo)
      if ioInfo.readFiber.nil? || ! ioInfo.readFiber.alive?
        ioInfo.readFiber = Fiber.new do |ioInfo|
          yield ioInfo.readFiberIoFacade
        end
      end     
  
      # Allow handler to read some data.
      # This call will return either if:
      #  1. the handler needs more data but it isn't available yet,
      #  2. if it's read all the data it wanted to read for the current message it's building
      #  3. if a read error occurred.
      #
      # In case 2 the latter case the fiber will be dead. In cases 1 and 2, we should select on the socket
      # until data is ready. For case 3, the state of the ioInfo is set to error and the io should be 
      # removed. 
      ioInfo.readFiber.resume(ioInfo)
      if ioInfo.state == :error
        @currentHandlerCallback = :error
        @handler.error(ioInfo.metainfo, ioInfo.lastReadError)
        disposeIo(ioInfo)
      end
      
    end
Call the passed block in the context of the read Fiber. Basically the
 passed block is run as normal, but if the block performs a read from an io and that
 read would block, the block is paused, and withReadFiber returns. The next time withReadFiber
 is called the block will be resumed at the point of the read.