ejabberd中的get_conn_type函数是什么

时间:2014-01-23 23:33:11

标签: erlang ejabberd

我有ejabberd 13.12,一切都很好,直到我将服务器机器移动到另一个网络,然后jabber服务器开始计算崩溃。 (网络的类型和细节相同)

CRASH REPORT Process <0.4260.0> with 0 neighbours exited with reason: call to undefined function ejabberd_socket:get_conn_type({socket_state,gen_tcp,#Port<0.5852>,<0.4259.0>}) in p1_fsm:terminate/7 line 733 2014-01-23 09:34:42.548 [error] <0.330.0> Supervisor ejabberd_c2s_sup had child undefined started with {ejabberd_c2s,start_link,undefined} at <0.4260.0> exit with reason call to undefined function ejabberd_socket:get_conn_type({socket_state,gen_tcp,#Port<0.5852>,<0.4259.0>}) in context child_terminated

在机器迁移后,用户的状态随机更改。

我尝试重新安装jabber服务器,并且我使用了从头开始编译的ejabberd 2.1.13 - 使用jabber时出现了同样的错误。

功能是:

get_conn_type(StateData) ->
 case (StateData#state.sockmod):get_sockmod(StateData#state.socket) of
 gen_tcp -> c2s;
 p1_tls -> c2s_tls;
 ezlib ->
    case ezlib:get_sockmod((StateData#state.socket)#socket_state.socket) of
        gen_tcp -> c2s_compressed;
        p1_tls -> c2s_compressed_tls
    end;
 ejabberd_http_poll -> http_poll;
 ejabberd_http_bind -> http_bind;
 _ -> unknown
 end.
  1. 我想要理解这个函数(好的pythoner,从不erlang)并添加hack或查明问题:是sth ejabberd特定的还是sth with socket(但其他网络工具/服务工作正常)。

    a)如何向该函数插入交互式调试器,并在那里获得堆栈和变量的交互式内省。

1 个答案:

答案 0 :(得分:0)

您看到的错误消息显示get_conn_type模块中不存在ejabberd_socket函数。这是真的;在标准的ejabberd发行版中,get_conn_type存在于ejabberd_c2s模块中。

如果你肯定你和其他任何人都没有修改过这些来源,那么我会检查你的Erlang安装。也许它已经坏了,或者你正在使用不同的版本来编译和运行代码。