# File lib/memcache/event_machine.rb, line 21
    def socket
      sock = Thread.current[fiber_key]
      return sock if sock and not sock.closed?

      Thread.current[fiber_key] = nil

      # If the host was dead, don't retry for a while.
      return if @retry and @retry > Time.now
    
      Thread.current[fiber_key] ||= begin
        sock = EM::SocketConnection.connect(@host, @port, @timeout)
        yielding = true
        fiber = Fiber.current
        sock.callback do
          @status = 'CONNECTED'
          @retry  = nil
          yielding = false
          fiber.resume if Fiber.current != fiber
        end
        sock.errback do
          sock = nil
          yielding = false
          fiber.resume if Fiber.current != fiber
        end
        Fiber.yield if yielding
        sock
      end
    end