Revert "greenio: Remove sendall-like semantincs from GreenSocket.send"

On Travis CI it breaks the build with:

======================================================================
FAIL: test_multiple_readers (tests.greenio_test.TestGreenIoLong)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/travis/build/eventlet/eventlet/tests/__init__.py", line 71, in wrapped
    return func(*a, **kw)
  File "/home/travis/build/eventlet/eventlet/tests/greenio_test.py", line 836, in test_multiple_readers
    assert len(results2) > 0
AssertionError

This reverts commit 4656eadfa5.
This commit is contained in:
Jakub Stasiak
2015-11-23 12:11:37 +01:00
parent 02b693a45d
commit 3ae710e70e

View File

@@ -351,20 +351,28 @@ class GreenSocket(object):
if self.act_non_blocking:
return fd.send(data, flags)
# blocking socket behavior - sends all, blocks if the buffer is full
total_sent = 0
len_data = len(data)
while 1:
try:
return fd.send(data, flags)
total_sent += fd.send(data[total_sent:], flags)
except socket.error as e:
eno = get_errno(e)
if eno == errno.ENOTCONN or eno not in SOCKET_BLOCKING:
raise
if total_sent == len_data:
break
try:
self._trampoline(self.fd, write=True, timeout=self.gettimeout(),
timeout_exc=socket.timeout("timed out"))
except IOClosed:
raise socket.error(errno.ECONNRESET, 'Connection closed by another thread')
return total_sent
def sendall(self, data, flags=0):
tail = self.send(data, flags)
len_data = len(data)