Skip to content

Commit

Permalink
Identify errors more precisely, using a tuple
Browse files Browse the repository at this point in the history
  • Loading branch information
mnot committed Jun 18, 2012
1 parent 828924d commit 6268397
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
20 changes: 11 additions & 9 deletions thor/tcp.py
Expand Up @@ -106,14 +106,14 @@ class TcpConnection(EventSource):
write_bufsize = 16 write_bufsize = 16
read_bufsize = 1024 * 16 read_bufsize = 1024 * 16


_block_errs = set([ _block_errs = set([(socket.error, e) for e in [
errno.EAGAIN, errno.EWOULDBLOCK errno.EAGAIN, errno.EWOULDBLOCK
]) ]])
_close_errs = set([ _close_errs = set([(socket.error, e) for e in [
errno.EBADF, errno.ECONNRESET, errno.ESHUTDOWN, errno.EBADF, errno.ECONNRESET, errno.ESHUTDOWN,
errno.ECONNABORTED, errno.ECONNREFUSED, errno.ECONNABORTED, errno.ECONNREFUSED,
errno.ENOTCONN, errno.EPIPE errno.ENOTCONN, errno.EPIPE
]) ]])


def __init__(self, sock, host, port, loop=None): def __init__(self, sock, host, port, loop=None):
EventSource.__init__(self, loop) EventSource.__init__(self, loop)
Expand Down Expand Up @@ -151,9 +151,10 @@ def handle_read(self):
# TODO: look into recv_into (but see python issue7827) # TODO: look into recv_into (but see python issue7827)
data = self.socket.recv(self.read_bufsize) data = self.socket.recv(self.read_bufsize)
except Exception, why: except Exception, why:
if why[0] in self._block_errs: err = (type(why), why[0])
if err in self._block_errs:
return return
elif why[0] in self._close_errs: elif err in self._close_errs:
self.emit('close') self.emit('close')
return return
else: else:
Expand All @@ -171,10 +172,11 @@ def handle_write(self):
data = "".join(self._write_buffer) data = "".join(self._write_buffer)
try: try:
sent = self.socket.send(data) sent = self.socket.send(data)
except socket.error, why: except Exception, why:
if why[0] in self._block_errs: err = (type(why), why[0])
if err in self._block_errs:
return return
elif why[0] in self._close_errs: elif err in self._close_errs:
self.emit('close') self.emit('close')
return return
else: else:
Expand Down
9 changes: 6 additions & 3 deletions thor/tls.py
Expand Up @@ -37,9 +37,12 @@


from thor.tcp import TcpServer, TcpClient, TcpConnection, server_listen from thor.tcp import TcpServer, TcpClient, TcpConnection, server_listen


TcpConnection._block_errs.add(sys_ssl.SSL_ERROR_WANT_READ) TcpConnection._block_errs.add((sys_ssl.SSLError, sys_ssl.SSL_ERROR_WANT_READ))
TcpConnection._block_errs.add(sys_ssl.SSL_ERROR_WANT_WRITE) TcpConnection._block_errs.add(
TcpConnection._close_errs.add(sys_ssl.SSL_ERROR_EOF) (sys_ssl.SSLError, sys_ssl.SSL_ERROR_WANT_WRITE)
)
TcpConnection._close_errs.add((sys_ssl.SSLError, sys_ssl.SSL_ERROR_EOF))
TcpConnection._close_errs.add((sys_ssl.SSLError, sys_ssl.SSL_ERROR_SSL))


# TODO: TlsServer # TODO: TlsServer
# TODO: expose cipher info, peer info # TODO: expose cipher info, peer info
Expand Down

0 comments on commit 6268397

Please sign in to comment.