diff options
author | Avery Pennarun <apenwarr@gmail.com> | 2011-01-12 09:19:43 -0800 |
---|---|---|
committer | Avery Pennarun <apenwarr@gmail.com> | 2011-01-12 09:19:43 -0800 |
commit | 38bb7f3c2159e7d2b154cf30ae2884a3261a7482 (patch) | |
tree | 6d67490b12fec4e194525d70d9ddd0150b16d268 | |
parent | b7f1530aefc6272d02a9a1d7e9ccfc393089a01c (diff) |
If we get EPIPE on uwrite(), don't close, just do nowrite().
EPIPE doesn't mean the whole socket is dead, it just means we can't write to
it. Maybe there's still data waiting to be read, though.
-rw-r--r-- | ssnet.py | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -163,9 +163,14 @@ class SockWrapper: try: return _nb_clean(os.write, self.wsock.fileno(), buf) except OSError, e: - # unexpected error... stream is dead - self.seterr('uwrite: %s' % e) - return 0 + if e.errno == errno.EPIPE: + debug1('%r: uwrite: got EPIPE\n' % self) + self.nowrite() + return 0 + else: + # unexpected error... stream is dead + self.seterr('uwrite: %s' % e) + return 0 def write(self, buf): assert(buf) |