upper limit of 'receive after' timeout
Bjorn Gustavsson
bjorn@REDACTED
Wed Sep 14 13:32:23 CEST 2005
The highest allowed value is 16#ffffffff (i.e. the value must
fit in 32 bits).
/Björn
Fredrik Thulin <ft@REDACTED> writes:
> Hi
>
> There appears to be an undocumented upper limit of the timeout value in
> a 'receive after' clause. The documentation
> (http://www.erlang.se/doc/doc-5.4.8/doc/reference_manual/expressions.html#6.10)
> says "ExprT should evaluate to an integer.". 10 000 000 000 is an
> integer (10 million seconds, around 115 days), but apparently too big
> to be used as ExprT :
>
> $ erl
> Erlang (BEAM) emulator version 5.4.8 [source] [hipe]
>
> Eshell V5.4.8 (abort with ^G)
> 1> receive _ -> ok after 1000 -> io:format("timeout~n") end.
> timeout
> ok
> 2> T = 10000000 * 1000.
> 10000000000
> 3> is_integer(T).
> true
> 4> receive _ -> ok after T -> io:format("timeout~n") end.
>
> =ERROR REPORT==== 14-Sep-2005::13:16:29 ===
> Error in process <0.30.0> with exit value: {timeout_value,
> [{erl_eval,receive_clauses,8},{shell,exprs,6},{shell,eval_loop,3}]}
>
> ** exited: {timeout_value,[{erl_eval,receive_clauses,8},
> {shell,exprs,6},
> {shell,eval_loop,3}]} **
> 5>
>
> Why do I want to do this? To allow for TCP connections with veery little
> activitiy (on the application layer) over veery long time, but not
> indefinitely. SIP clients behind NATs might need this :(. Perhaps 115
> days is a bit too much, but what is the upper limit of 'receive after'?
>
> /Fredrik
>
--
Björn Gustavsson, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list