1
我有一個ejabberd模塊的問題。它是http_bind。 但是,當我深深地調試時,我發現接受套接字併產卵 哈希進程,並通過調用gen_tcp:controls_process()失敗與badarg爲什麼接收數據爲新創建的進程 重新分配過程?爲什麼gen_tcp:controls_process()可以通過badarg失敗?
...
{ok, Socket} = get_tcp:accept(ListenSocket),
Opts = [{active, false}, ...],
% here function return result of proc_lib:spawn_link(handler, ...)
{ok, Pid} = ejabberd_http:start({gen_tcp, Socket}, Opts),
gen_tcp:controlling_process(Socket, Pid),
: {badarg, [
{erlang, port_connect, [#Port<0.140743856>, <0.5939.4350>]},
{inet, tcp_controlling_process, 2},
{ejabberd_socket,start,4},
{ejabberd_listener,accept,3},
{proc_lib,init_p,5}
]}
任何幫助嗎?
從文檔頁面:「失敗:badarg如果端口不是開放端口或開放端口的註冊名稱,或者如果Pid不是現有的本地pid。 – 2010-02-03 20:11:25
我認爲過程是成功創建的,但可能在controls_process()調用它之前崩潰了,但是爲什麼?...你知道我以前如何測試過程pid有效性? – vinnitu 2010-02-04 08:20:41
你總是可以做erlang:process_info(Pid)並查看返回結果以確定進程是否正在運行。 – Lukas 2010-02-04 08:25:45