def _recvall(sock, length):
        dataList = []
        recvLen = 0
        while length:
            try:
                data = sock.recv(length)
            except socket.error, e:
                if e[0] == errno.EAGAIN:
                    select.select([sock], [], [])
                    continue
                elif e[0] == errno.EINTR:
                    continue
                else:
                    raise
            if not data: # EOF
                break
            dataList.append(data)
            dataLen = len(data)
            recvLen += dataLen
            length -= dataLen
        return ''.join(dataList), recvLen
@param root: factory providing the root Referenceable used by the broker.
dataset/ETHPy150Open kdart/pycopia/core/pycopia/inet/fcgi.py/Record._recvall--crossover with--dataset/ETHPy150Open nlloyd/SubliminalCollaborator/libs/twisted/spread/pb.py/PBServerFactory.__init__