On Solaris, calls to select.select() and socket.socket() in telnetlib (and possibly others) often fail due to unhandled EINTR signals from the OS while select() is polling. I think this problem is Solaris-specific since Solaris has interruptible non-restartable sytem calls. This behavior is apparently a known issue with the system API select(); see man -s3c select and http://lists.community.tummy.com/pipermail/frpythoneers/2000-August/000122.html The recommend fix from frpythoneers is to wrap the select (and socket, respectively) calls in a loop: while True: try: select.select(...) break except select.error, v: if v[0] == errno.EINTR: continue else: raise It's probably more appropriate to put the exception-handling *inside* select.select (and socket.socket) but that's beyond my expertise... OS: SunOS 5.9 Generic_112233-11 sun4u sparc SUNW,Sun-Blade-100
The telnetlib now uses the new selectors introduced in Python 3.4: see the issue #19170. The selectors module handles InterruptedError (EINTR): it returns an empty list of events in this case. The changeset f713d9b6393c of the issue #19170 fixed this issue. Sorry for the delay, 10 years to fix this bug... It's probably because the telnetlib module is not widely used...