diff --git a/lib/utils.py b/lib/utils.py
index e3dd435649696c8d32f2c85e2c7a8800e530b7b4..2909f866418db6b21b17d0e80b09d4ba80a17b30 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -2518,10 +2518,12 @@ def IgnoreSignals(fn, *args, **kwargs):
   """
   try:
     return fn(*args, **kwargs)
-  except (EnvironmentError, socket.error), err:
+  except EnvironmentError, err:
     if err.errno != errno.EINTR:
       raise
-  except select.error, err:
+  except (select.error, socket.error), err:
+    # In python 2.6 and above select.error is an IOError, so it's handled
+    # above, in 2.5 and below it's not, and it's handled here.
     if not (err.args and err.args[0] == errno.EINTR):
       raise
 
diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py
index 548d04eed09e70a5ab2d2272fdfae29af330ec13..a78115f077b1e2539842a9ebe5b12a4948663764 100755
--- a/test/ganeti.utils_unittest.py
+++ b/test/ganeti.utils_unittest.py
@@ -1836,9 +1836,7 @@ class TestIgnoreSignals(unittest.TestCase):
 
   def testIgnoreSignals(self):
     sock_err_intr = socket.error(errno.EINTR, "Message")
-    sock_err_intr.errno = errno.EINTR
     sock_err_inval = socket.error(errno.EINVAL, "Message")
-    sock_err_inval.errno = errno.EINVAL
 
     env_err_intr = EnvironmentError(errno.EINTR, "Message")
     env_err_inval = EnvironmentError(errno.EINVAL, "Message")