]> granicus.if.org Git - python/commitdiff
bpo-30329: Catch Windows error 10022 on shutdown() (#1538) (#1621)
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 16 May 2017 23:02:35 +0000 (16:02 -0700)
committerGitHub <noreply@github.com>
Tue, 16 May 2017 23:02:35 +0000 (16:02 -0700)
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.
(cherry picked from commit 83a2c2879839da2e10037f5e4af1bd1dafbf1a52)

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

index 2f7e9331fbc86cb807f1137084b9d6fd72f62de7..ef2c6f814c571618f6b953380888aa9178feb161 100644 (file)
@@ -310,9 +310,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 f6723904e859e12d871aa71c88a426e911372e95..516b6f060d28842a7f6ca0c9abaa766cc317e619 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 6b4b401aa626158016a8e08e8b69d805c11e6f54..16cb60c9e32a30fea74768002a8b1e64790bfa4d 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -49,6 +49,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-30375: Warnings emitted when compile a regular expression now always
   point to the line in the user code.  Previously they could point into inners
   of the re module if emitted from inside of groups or conditionals.