[erlang-questions 73] Re: dialyzer and ssl
Ingela Andin
ingela.andin@REDACTED
Mon Mar 28 08:58:55 CEST 2011
Hi!
2011/3/24 Roberto Ostinelli <roberto@REDACTED>:
> 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} ->
You should not match a record as its tuple representation, it breaks the
abstraction and possible your code if we add a record field, and in this
case the record is not documented either, the "sslsocket" is documented to
be opaque to the user so you ought to match only {ok, Socket}
> 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?
As for ssl:ssl_accept/2 it can return both ok and {ok, Socket} the
latter will be returned if you upgrade
a tcp-socket to an ssl-socket and ok will be returned in the normal
case to retain backwards compatibility. (You
already have access to the sslsocket from the transport_accept in this
case). This is documented even in r13.
We wanted to return {ok, Socket} in both cases but we had to
priorities the backwards compatibility so
not using the latest version could very well result in discrepancies,
but I have not looked deeper to
verify what is your actual problem.
Regards Ingela Erlang/OTP team - Ericsson AB
More information about the erlang-questions
mailing list