<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -206,14 +206,13 @@ module Net; module SSH; module Multi
       # session is not open.
       def readers #:nodoc:
         return [] unless session
-        session.listeners.keys
+        session.listeners.keys.reject { |io| io.closed? }
       end
 
       # Returns all registered and pending writers on the session, or an empty
       # array if the session is not open.
       def writers #:nodoc:
-        return [] unless session
-        session.listeners.keys.select do |io|
+        readers.select do |io|
           io.respond_to?(:pending_write?) &amp;&amp; io.pending_write?
         end
       end</diff>
      <filename>lib/net/ssh/multi/server.rb</filename>
    </modified>
    <modified>
      <diff>@@ -178,9 +178,10 @@ class ServerTest &lt; Test::Unit::TestCase
   def test_readers_should_return_all_listeners_when_session_is_open
     srv = server('host')
     session = expect_connection_to(srv)
-    session.expects(:listeners).returns(1 =&gt; 2, 3 =&gt; 4, 5 =&gt; 6, 7 =&gt; 8)
+    io1, io2, io3, io4 = Reader.new, Reader.new, Reader.new, Reader.new
+    session.expects(:listeners).returns(io1 =&gt; 2, io2 =&gt; 4, io3 =&gt; 6, io4 =&gt; 8)
     srv.session(true)
-    assert_equal [1, 3, 5, 7], srv.readers.sort
+    assert_equal [io1, io2, io3, io4], srv.readers.sort
   end
 
   def test_writers_should_return_empty_array_when_session_is_not_open
@@ -190,8 +191,8 @@ class ServerTest &lt; Test::Unit::TestCase
   def test_writers_should_return_all_listeners_that_are_pending_writes_when_session_is_open
     srv = server('host')
     session = expect_connection_to(srv)
-    listeners = { writer(:ready) =&gt; 1, writer(:reader) =&gt; 2,
-      writer(:reader) =&gt; 3, writer(:idle) =&gt; 4, writer(:ready) =&gt; 5 }
+    listeners = { Reader.new(true) =&gt; 1, MockIO.new =&gt; 2,
+      MockIO.new =&gt; 3, Reader.new =&gt; 4, Reader.new(true) =&gt; 5 }
     session.expects(:listeners).returns(listeners)
     srv.session(true)
     assert_equal 2, srv.writers.length
@@ -212,6 +213,37 @@ class ServerTest &lt; Test::Unit::TestCase
 
   private
 
+    class MockIO
+      include Comparable
+
+      @@identifier = 0
+
+      attr_reader :id
+
+      def initialize
+        @id = (@@identifier += 1)
+      end
+
+      def &lt;=&gt;(io)
+        @id &lt;=&gt; io.id
+      end
+
+      def closed?
+        false
+      end
+    end
+
+    class Reader &lt; MockIO
+      def initialize(ready=false)
+        super()
+        @ready = ready
+      end
+
+      def pending_write?
+        @ready
+      end
+    end
+
     def server(host, options={})
       Net::SSH::Multi::Server.new(@master, host, options)
     end
@@ -221,15 +253,4 @@ class ServerTest &lt; Test::Unit::TestCase
       @master.expects(:next_session).with(server).returns(session)
       return session
     end
-
-    def writer(mode)
-      case mode
-      when :ready then
-        stub('io', :pending_write? =&gt; true)
-      when :idle then
-        stub('io', :pending_write? =&gt; false)
-      else
-        stub('io')
-      end
-    end
 end
\ No newline at end of file</diff>
      <filename>test/server_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>00e01a9f1079017f3b5ca72a0d9d33496f7e5143</id>
    </parent>
  </parents>
  <author>
    <name>Jamis Buck</name>
    <email>jamis@37signals.com</email>
  </author>
  <url>http://github.com/jamis/net-ssh-multi/commit/6f8e3c6e342fb1544c72a7b58411a5bfb8466b6b</url>
  <id>6f8e3c6e342fb1544c72a7b58411a5bfb8466b6b</id>
  <committed-date>2008-04-18T14:33:13-07:00</committed-date>
  <authored-date>2008-04-18T14:33:13-07:00</authored-date>
  <message>don't try to select on io's that are closed</message>
  <tree>50a28ade0446f3b03b83bdafc48a430598aff62a</tree>
  <committer>
    <name>Jamis Buck</name>
    <email>jamis@37signals.com</email>
  </committer>
</commit>
