]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
partial backport of 1.25:
authorAnthony Baxter <anthonybaxter@gmail.com>
Sun, 23 Dec 2001 01:26:49 +0000 (01:26 +0000)
committerAnthony Baxter <anthonybaxter@gmail.com>
Sun, 23 Dec 2001 01:26:49 +0000 (01:26 +0000)
select not defensive. check for EINTR and make sure it's handled painlessly.

Lib/asyncore.py

index 145da58bdb8c457d90f1a2921b7f034199cc5cc0..98db70e357681e2bf704fd30c3c5b812fbd825ad 100644 (file)
@@ -52,15 +52,8 @@ import socket
 import sys
 
 import os
-if os.name == 'nt':
-    EWOULDBLOCK = 10035
-    EINPROGRESS = 10036
-    EALREADY    = 10037
-    ECONNRESET  = 10054
-    ENOTCONN    = 10057
-    ESHUTDOWN   = 10058
-else:
-    from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, ENOTCONN, ESHUTDOWN
+from errno import EALREADY, EINPROGRESS, EWOULDBLOCK, ECONNRESET, \
+     ENOTCONN, ESHUTDOWN, EINTR
 
 try:
     socket_map
@@ -83,7 +76,12 @@ def poll (timeout=0.0, map=None):
                 r.append (fd)
             if obj.writable():
                 w.append (fd)
-        r,w,e = select.select (r,w,e, timeout)
+        try:
+            r,w,e = select.select (r,w,e, timeout)
+        except select.error, err:
+            if err[0] != EINTR:
+                raise
+
 
         if DEBUG:
             print r,w,e
@@ -161,7 +159,12 @@ def poll3 (timeout=0.0, map=None):
                 flags = flags | select.POLLOUT
             if flags:
                 pollster.register(fd, flags)
-        r = pollster.poll (timeout)
+        try:
+            r = pollster.poll (timeout)
+        except select.error, err:
+            if err[0] != EINTR:
+                raise
+            r = []
         for fd, flags in r:
             try:
                 obj = map[fd]
@@ -260,7 +263,8 @@ class dispatcher:
         try:
             self.socket.setsockopt (
                 socket.SOL_SOCKET, socket.SO_REUSEADDR,
-                self.socket.getsockopt (socket.SOL_SOCKET, socket.SO_REUSEADDR) | 1
+                self.socket.getsockopt (socket.SOL_SOCKET,
+                                        socket.SO_REUSEADDR) | 1
                 )
         except:
             pass
@@ -393,7 +397,7 @@ class dispatcher:
         self.handle_expt()
 
     def handle_error (self):
-        (file,fun,line), t, v, tbinfo = compact_traceback()
+        nil, t, v, tbinfo = compact_traceback()
 
         # sometimes a user repr method will crash.
         try: