The documentation says:
A value of zero indicates that interval time-outs are not used.
A value of MAXDWORD, combined with zero values for both the ReadTotalTimeoutConstant and ReadTotalTimeoutMultiplier members, specifies that the read operation is to return immediately with the bytes that have already been received, even if no bytes have been received.
So if you want to wait until data arrives, use zero. If you want to return immediately with whatever data has been received, use MAXDWORD.