Merged revisions 74426 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r74426 | gregory.p.smith | 2009-08-13 14:54:50 -0400 (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.
........
This commit is contained in:
Jean-Paul Calderone 2010-05-23 15:22:08 +00:00
parent add85daa87
commit c28d554db8
4 changed files with 146 additions and 14 deletions

View file

@ -2723,8 +2723,21 @@ sock_sendall(PySocketSockObject *s, PyObject *args)
#else
n = send(s->sock_fd, buf, len, flags);
#endif
if (n < 0)
if (n < 0) {
#ifdef EINTR
/* We must handle EINTR here as there is no way for
* the caller to know how much was sent otherwise. */
if (errno == EINTR) {
/* Run signal handlers. If an exception was
* raised, abort and leave this socket in
* an unknown state. */
if (PyErr_CheckSignals())
return NULL;
continue;
}
#endif
break;
}
buf += n;
len -= n;
} while (len > 0);