'Retrieve the contents of the file at *path* on the *service_name* and write these contents to the provided *file_obj*.
:param string/unicode service_name: the name of the shared folder for the *path*
:param string/unicode path: Path of the file on the remote server. If the file cannot be opened for reading, an :doc:`OperationFailure<smb_exceptions>` will be raised.
:param file_obj: A file-like object that has a *write* method. Data will be written continuously to *file_obj* up to *max_length* number of bytes.
:param integer/long offset: the offset in the remote *path* where the first byte will be read and written to *file_obj*. Must be either zero or a positive integer/long value.
:param integer/long max_length: maximum number of bytes to read from the remote *path* and write to the *file_obj*. Specify a negative value to read from *offset* to the EOF.
If zero, the method returns immediately after the file is opened successfully for reading.
:return: A 2-element tuple of ( file attributes of the file on server, number of bytes written to *file_obj* ).
The file attributes is an integer value made up from a bitwise-OR of *SMB_FILE_ATTRIBUTE_xxx* bits (see smb_constants.py)'

def retrieveFileFromOffset(self, service_name, path, file_obj, offset=0L, max_length=(-1L), timeout=30):

    if (not self.sock):
        raise NotConnectedError('Not    connected    to    server')
    results = []
    def cb(r):
        self.is_busy = False
        results.append(r[1:])
    def eb(failure):
        self.is_busy = False
        raise failure
    self.is_busy = True
    try:
        self._retrieveFileFromOffset(service_name, path, file_obj, cb, eb, offset, max_length, timeout=timeout)
        while self.is_busy:
            self._pollForNetBIOSPacket(timeout)
    finally:
        self.is_busy = False
    return results[0]
