A common way to initiate the async IO event system in Rebol 3 is to wait on the port. To check for a timeout, a value from the scheme is added to the wait block.
wait [port timeout]
But a default timeout for a small email message may not be appropriate for a multimegabyte file.
What's the best way of handling this? If you're still receiving data, can you update the wait list while your script is receiving data so that you don't unnecessarily timeout?
I think a port timeout should trigger based on packet timing, not the full request. So, setting a timeout of 30 seconds on email means you've not received a packet in 30 seconds.
Since packets tend to be small, they arrive quickly, and not to receive one for a long period would be indication of a networking/server failure, where you'd want to get the timeout. (The exception is when packet aggregation is happening, but still, there won't be so much aggregation that a long delay would normally occur.)
All that, said, I'm not sure they're implemented in R3. Based on the prior comment, I guess not. The networking system was one of the first parts I wrote for R3, and it was lean and mean, but certainly could use some attention.