Improve subprocess link error notification
M NEWS.txt
M PyShell.py
M rpc.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index afec8e4..03ba114 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,8 @@
 
 *Release date: XX-XXX-2005*
 
+- Improve subprocess link error notification.
+
 - run.py: use Queue's blocking feature instead of sleeping in the main
   loop.  Patch # 1190163 Michiel de Hoon
 
diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py
index fecbf1a..fa348be 100644
--- a/Lib/idlelib/PyShell.py
+++ b/Lib/idlelib/PyShell.py
@@ -596,6 +596,8 @@
                 self.write("Unsupported characters in input")
                 return
         try:
+            # InteractiveInterpreter.runsource() calls its runcode() method,
+            # which is overridden (see below)
             return InteractiveInterpreter.runsource(self, source, filename)
         finally:
             if self.save_warnings_filters is not None:
@@ -720,6 +722,7 @@
                 else:
                     self.showtraceback()
             except:
+                print>>sys.stderr, "IDLE internal error in runcode()"
                 self.showtraceback()
         finally:
             if not use_subprocess:
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 402cfa7..3bac6a3 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -330,9 +330,10 @@
             try:
                 r, w, x = select.select([], [self.sock], [])
                 n = self.sock.send(s[:BUFSIZE])
-            except (AttributeError, socket.error):
-                # socket was closed
-                raise IOError
+            except (AttributeError, TypeError):
+                raise IOError, "socket no longer exists"
+            except socket.error:
+                raise
             else:
                 s = s[n:]