]> granicus.if.org Git - python/commitdiff
bpo-30329: Catch Windows error 10022 on shutdown() (#1538)
authorVictor Stinner <victor.stinner@gmail.com>
Mon, 15 May 2017 15:33:45 +0000 (17:33 +0200)
committerGitHub <noreply@github.com>
Mon, 15 May 2017 15:33:45 +0000 (17:33 +0200)
Catch the Windows socket WSAEINVAL error (code 10022) in imaplib and
poplib on shutdown(SHUT_RDWR): An invalid operation was attempted

This error occurs sometimes on SSL connections.

Lib/imaplib.py
Lib/poplib.py
Misc/NEWS

index 2fa90120e7decc9de8ccd61b16ba4c8eb04f5588..1c0b03bff8a3792c2fda3ca566690889daa1b4be 100644 (file)
@@ -318,9 +318,12 @@ class IMAP4:
         self.file.close()
         try:
             self.sock.shutdown(socket.SHUT_RDWR)
-        except OSError as e:
-            # The server might already have closed the connection
-            if e.errno != errno.ENOTCONN:
+        except OSError as exc:
+            # The server might already have closed the connection.
+            # On Windows, this may result in WSAEINVAL (error 10022):
+            # An invalid operation was attempted.
+            if (exc.errno != errno.ENOTCONN
+               and getattr(exc, 'winerror', 0) != 10022):
                 raise
         finally:
             self.sock.close()
index cae6950eb6d2d6c980bbdf7f6aeb507a35e88b7e..6bcfa5cfeba37bfb9ce06da52ec905c8d4fbc513 100644 (file)
@@ -288,9 +288,12 @@ class POP3:
             if sock is not None:
                 try:
                     sock.shutdown(socket.SHUT_RDWR)
-                except OSError as e:
-                    # The server might already have closed the connection
-                    if e.errno != errno.ENOTCONN:
+                except OSError as exc:
+                    # The server might already have closed the connection.
+                    # On Windows, this may result in WSAEINVAL (error 10022):
+                    # An invalid operation was attempted.
+                    if (exc.errno != errno.ENOTCONN
+                       and getattr(exc, 'winerror', 0) != 10022):
                         raise
                 finally:
                     sock.close()
index a874d03cda6e3ba2be5748615a67277cf5fa6d4c..9583149a11e7fc1f5a0b2acc305088596f914037 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -323,6 +323,10 @@ Extension Modules
 Library
 -------
 
+- bpo-30329: imaplib and poplib now catch the Windows socket WSAEINVAL error
+  (code 10022) on shutdown(SHUT_RDWR): An invalid operation was attempted.
+  This error occurs sometimes on SSL connections.
+
 - bpo-29196: Removed previously deprecated in Python 2.4 classes Plist, Dict
   and _InternalDict in the plistlib module.  Dict values in the result of
   functions readPlist() and readPlistFromBytes() are now normal dicts.  You