[erlang-questions 23] Re: dialyzer and ssl

Kostis Sagonas <>
Sat Mar 26 13:45:35 CET 2011


Roberto Ostinelli wrote:
> dear list,
> 
> i'm getting this dialyzer warning i cannot understand:
> 
> "The pattern 'ok' can never match the type {'error',_} | 
> {'ok',{'sslsocket',_,_}}"
> 
> this points to line 4 of this code extract:
> 
> 1. case ssl:transport_accept(ListenSocket) of
> 2.    {ok, {sslsocket, _, _} = Sock} ->
> 3.        case ssl:ssl_accept(Sock, 60000) of
> 4.            ok ->
>                 ...
> 5.            {error, _Reason} ->
>                 ...
> 6.        end
> 7.    {error, _Reason} ->
>         ...
> 8. end
> 
> afaik, ssl_accept/2 returns ok | {error, Reason} as per the specs:
> http://www.erlang.org/doc/man/ssl.html#ssl_accept-2
> 
> is this due to some discrepancy in docs/specs? or am i missing something?

You have not told us which Erlang/OTP version this is, so it's hard to 
tell you what's happening. The documentation you are pointing us at is 
for R14B02. Is your code also using the dialyzer of this version?

In R14B02 the spec for this function (from the ssl.erl code) reads:

     -spec ssl_accept(#sslsocket{} | port(), timeout()| [option()]) ->
                  ok | {ok, #sslsocket{}} | {error, reason()}.

which makes me strongly suspect that this function has changed return 
values between Erlang/OTP versions (it was previously returning 'ok' and 
now it returns {'ok', #sslsocket{}}, or the other way around).

My advice: if you are to be relying on the Erlang/OTP documentation on 
the web, use R14B02.

Kostis



More information about the erlang-questions mailing list