diff options
author | Gregory P. Smith <greg@mad-scientist.com> | 2010-01-04 04:50:36 +0000 |
---|---|---|
committer | Gregory P. Smith <greg@mad-scientist.com> | 2010-01-04 04:50:36 +0000 |
commit | 4b31db71afac7bf675641aa25f5fd7410d51af81 (patch) | |
tree | 96b911e94259b39bfcde484cccabf218c71c3f78 /Lib/socket.py | |
parent | bcffee185768c34d89d1f1c6bac2d3cd818624d6 (diff) | |
download | cpython-4b31db71afac7bf675641aa25f5fd7410d51af81.tar.gz |
Merged revisions 74426 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r74426 | gregory.p.smith | 2009-08-13 11:54:50 -0700 (Thu, 13 Aug 2009) | 4 lines
Fix issue1628205: Socket file objects returned by socket.socket.makefile() now
properly handles EINTR within the read, readline, write & flush methods.
The socket.sendall() method now properly handles interrupted system calls.
........
Diffstat (limited to 'Lib/socket.py')
-rw-r--r-- | Lib/socket.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Lib/socket.py b/Lib/socket.py index 9133411c31..a82e48dcef 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -49,9 +49,11 @@ from _socket import * import os, sys, io try: - from errno import EBADF + import errno except ImportError: - EBADF = 9 + errno = None +EBADF = getattr(errno, 'EBADF', 9) +EINTR = getattr(errno, 'EINTR', 4) __all__ = ["getfqdn", "create_connection"] __all__.extend(os._get_exports_list(_socket)) @@ -212,7 +214,13 @@ class SocketIO(io.RawIOBase): def readinto(self, b): self._checkClosed() self._checkReadable() - return self._sock.recv_into(b) + while True: + try: + return self._sock.recv_into(b) + except error as e: + if e.args[0] == EINTR: + continue + raise def write(self, b): self._checkClosed() |