From an API perspective you can pass in any TimeSpan value and it will be accepted. The reasons for it to return sooner than you have specified even when there is no message could be network glitches, service side updates etc.
The time you decide to put there should be based on how often you expect messages and also when you want control back to be able to cleanly shutdown your client process. Say you expect messages every minute then setting a timeout of 5 minutes and getting a null back could indicate that the system is not healthy. Also say you are shutting down the service, you want to not call the next receive and want all the pending ones to complete and that way you can limit the timeout to a couple minutes.