The XferData() call for isoc endpoints has an additional structure which contains data about the exact amount of data received from the device. This is the 'pktInfos' field.
Explanation and example code is available in the reference guide. Did you take a look at it? Can you let us know what exactly is not clear here so that we can assist you better?
In general, isoc transfers need to have a x8 factor for the length because isoc data is requested in terms of frames. And since the endpoint max packet size is in terms of bytes/microframe and there are 8 microframes in one frame, the x8 factor comes into the picture. You can take a look at the explanation given here:
The 'pktmode' argument is only valid for bulk endpoint data transfers. It is used to make tranfers that are not a multiple of endpoint max packet size. It is not valid for isoc endpoints as the transfers for isoc endpoints are always in terms of data available in one whole frame (and this is always a multiple of endpoint maxpacketsize).
In cases where you want to receive less than 8184 bytes, you should still queue a bufLen of 8184 in the XferData call. The device can send lesser than this, in which case the isopkts structure would be updated with the correct length field based on exactly how many bytes of data the device has sent (this can be <=8184).