[svn r108] DEV-6119 Backbone Traceback re: SysCallError: (104, 'Connection reset by peer') in indra.log

==============
Fix discussed with Phoenix
Quick review by rdw

Misc
====
consolidate import errno and from errno import EWOULDBLOCK, EAGAIN
changes lines that used EAGAIN/EWOULDBLOCK to use errno.<E...>
This commit is contained in:
kartic.linden
2008-04-03 21:45:22 -04:00
parent 539f82a30e
commit 0370fb5d20

View File

@@ -28,7 +28,6 @@ import fcntl
import socket import socket
import select import select
import errno import errno
from errno import EWOULDBLOCK, EAGAIN
try: try:
from OpenSSL import SSL from OpenSSL import SSL
@@ -64,7 +63,7 @@ def g_log(*args):
ident = 'greenlet-%d' % (g_id,) ident = 'greenlet-%d' % (g_id,)
print >>sys.stderr, '[%s] %s' % (ident, ' '.join(map(str, args))) print >>sys.stderr, '[%s] %s' % (ident, ' '.join(map(str, args)))
CONNECT_ERR = (errno.EINPROGRESS, errno.EALREADY, EWOULDBLOCK) CONNECT_ERR = (errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK)
CONNECT_SUCCESS = (0, errno.EISCONN) CONNECT_SUCCESS = (0, errno.EISCONN)
def socket_connect(descriptor, address): def socket_connect(descriptor, address):
err = descriptor.connect_ex(address) err = descriptor.connect_ex(address)
@@ -161,7 +160,7 @@ def socket_accept(descriptor):
try: try:
return descriptor.accept() return descriptor.accept()
except socket.error, e: except socket.error, e:
if e[0] == EWOULDBLOCK: if e[0] == errno.EWOULDBLOCK:
return None return None
raise raise
@@ -169,14 +168,19 @@ def socket_send(descriptor, data):
try: try:
return descriptor.send(data) return descriptor.send(data)
except socket.error, e: except socket.error, e:
if e[0] == EWOULDBLOCK: if e[0] == errno.EWOULDBLOCK:
return 0 return 0
raise raise
except SSL.WantWriteError: except SSL.WantWriteError:
return 0 return 0
except SSL.WantReadError: except SSL.WantReadError:
return 0 return 0
# trap this error
except SSL.SysCallError, e:
(ssl_errno, ssl_errstr) = e
if ssl_errno == -1 or ssl_errno > 0:
raise socket.error(errno.ECONNRESET, errno.errorcode[errno.ECONNRESET])
raise
# winsock sometimes throws ENOTCONN # winsock sometimes throws ENOTCONN
SOCKET_CLOSED = (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN) SOCKET_CLOSED = (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN)
@@ -184,7 +188,7 @@ def socket_recv(descriptor, buflen):
try: try:
return descriptor.recv(buflen) return descriptor.recv(buflen)
except socket.error, e: except socket.error, e:
if e[0] == EWOULDBLOCK: if e[0] == errno.EWOULDBLOCK:
return None return None
if e[0] in SOCKET_CLOSED: if e[0] in SOCKET_CLOSED:
return '' return ''
@@ -194,16 +198,16 @@ def socket_recv(descriptor, buflen):
except SSL.ZeroReturnError: except SSL.ZeroReturnError:
return '' return ''
except SSL.SysCallError, e: except SSL.SysCallError, e:
if e[0] == -1 or e[0] > 0: (ssl_errno, ssl_errstr) = e
if ssl_errno == -1 or ssl_errno > 0:
raise socket.error(errno.ECONNRESET, errno.errorcode[errno.ECONNRESET]) raise socket.error(errno.ECONNRESET, errno.errorcode[errno.ECONNRESET])
raise raise
def file_recv(fd, buflen): def file_recv(fd, buflen):
try: try:
return fd.read(buflen) return fd.read(buflen)
except IOError, e: except IOError, e:
if e[0] == EAGAIN: if e[0] == errno.EAGAIN:
return None return None
return '' return ''
except socket.error, e: except socket.error, e:
@@ -218,7 +222,7 @@ def file_send(fd, data):
fd.flush() fd.flush()
return len(data) return len(data)
except IOError, e: except IOError, e:
if e[0] == EAGAIN: if e[0] == errno.EAGAIN:
return 0 return 0
except ValueError, e: except ValueError, e:
written = 0 written = 0