diff --git a/lib/utils.py b/lib/utils.py
index f2f00b56b89e2ecd7634e36306b4e35ac9e168dc..df14049d43732d5d3a5dec5c5d9cc4bf8029f866 100644
--- a/lib/utils.py
+++ b/lib/utils.py
@@ -566,10 +566,12 @@ def RetryOnSignal(fn, *args, **kwargs):
   while True:
     try:
       return fn(*args, **kwargs)
-    except (EnvironmentError, socket.error), err:
+    except EnvironmentError, err:
       if err.errno != errno.EINTR:
         raise
-    except select.error, err:
+    except (socket.error, select.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
 
@@ -3001,10 +3003,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 d72232ba470fd7dc68d869b6ed8a7aa580cc6943..b329ad7214f766e774041c812d343b35dcc25198 100755
--- a/test/ganeti.utils_unittest.py
+++ b/test/ganeti.utils_unittest.py
@@ -2224,9 +2224,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")