diff --git a/lib/gemerald_beanstalk/beanstalk.rb b/lib/gemerald_beanstalk/beanstalk.rb
index <HASH>..<HASH> 100644
--- a/lib/gemerald_beanstalk/beanstalk.rb
+++ b/lib/gemerald_beanstalk/beanstalk.rb
@@ -286,7 +286,7 @@ class GemeraldBeanstalk::Beanstalk
     timeout_at = Time.now.to_f + timeout unless [nil, 0].include?(timeout)
     connection.worker = true unless connection.worker?
     connection.waiting = true
-    while [nil, 0].include?(timeout) || Time.now.to_f < timeout_at
+    while ([nil, 0].include?(timeout) || Time.now.to_f < timeout_at) && connection.alive?
       @reserved[connection].each(&:state)
       return deadline_soon! if connection.deadline_pending?
 
diff --git a/lib/gemerald_beanstalk/connection.rb b/lib/gemerald_beanstalk/connection.rb
index <HASH>..<HASH> 100644
--- a/lib/gemerald_beanstalk/connection.rb
+++ b/lib/gemerald_beanstalk/connection.rb
@@ -6,9 +6,18 @@ class GemeraldBeanstalk::Connection
   attr_reader :beanstalk, :tube_used, :tubes_watched
   attr_writer :producer, :waiting, :worker
 
+  def alive?
+    return !closed?
+  end
 
   def close_connection
     (@connection.close_connection rescue nil) unless @connection.nil?
+    @closed = true
+  end
+
+
+  def closed?
+    return @closed || false
   end
Abort reserve if connection dies