2017-08-09 67 views
0

我知道这是很基本的,但它的驾驶我了墙:功能的记录作为参数

peercert被定义为:

peercert(Socket) -> {ok, Cert} | {error, Reason} 

Types 

Socket = sslsocket() 
Cert = binary() 
The peer certificate is returned as a DER-encoded binary. The certificate can be decoded with public_key:pkix_decode_cert/2. 

好,太好了。 SSLSocket已被定义为-record(SSLSocket时,{FD =零,PID =零})

于是我运行:

New = #sslsocket{pid = Pid}, 
io:fwrite("~n~npeercert~p~n~n", [ssl:peercert(New)]). 

但我得到的

no function clause matching ssl:peercert({sslsocket,<0.1277.0>,undefined}) 

所以我运行一个错误它与Pid作为参数,并得到类似的错误:

no function clause matching ssl:peercert(<0.1277.0>) 

我完全难住在这里。我以前工作过,功能说它需要这些作为参数...

谢谢你的帮助提前!

+1

这个值看起来不对我。 'pid ='应该设置元组的第三个元素,而不是第二个元素。如果你使用'ssl:peercert({sslsocket,nil,Pid})''怎么办? – Dogbert

+0

根据文档:'sslsocket()= opaque()',所以你不应该手动创建它。然而,我查看了实现,唯一我能猜到的是,你在某处包含了一个有冲突的'sslsocket'定义,或者在一个Erlang版本上运行,其中'sslsocket'定义不同(http://erlang.org /doc/apps/ssl/using_ssl.html说:“sslsocket的返回值缩写为[...],因为它可能相当大且不透明。”这看起来不再真实) –

+0

@Dogbert查看我的对下面的帖子发表评论,我尝试过,并没有抛出任何错误,但它无限地挂起了 – Ryan

回答

1

sslsocket()类型不是叫sslsocket记录,否则会被写成#sslsocket{}。这是一个“黑盒子类型”(它的实际类型是一个实现细节),但您可以从函数ssl:connect()中获得它。