Aha!  This appears to be a bug in OS X or in Python.  It sounds very
similar to this:
http://www.cherrypy.org/ticket/598

Following that cherrypy ticket, I changed the Connection class in
rocket.py:
removed:
self.sendall = self.socket.sendall

added:
    def sendall(self, buf):
        pending = len(buf)
        offset = 0
        while pending:
            try:
                sent = self.socket.send(buf[offset:])
                pending -= sent
                offset += sent
            except socket.error, e:
                if e[0]!=errno.EAGAIN:
                    raise

I was seeing EAGAIN raised frequently when socket.sendall() was called
repeatedly.  It looks like socket.sendall(), instead of catching the
EAGAIN and retrying, a socket.error is raised.

Reply via email to