gen_tcp:使用超级用户时,connect将关闭

地理7

当我直接运行gen_server时,我有一个简单的gen_server连接到tcp端口:

erl -noshell -s ttest start

它工作正常,但是当我运行时:

erl -noshell -s tt_sup start_link

连接将立即关闭,如果我取消链接主管,它将可以使用:

erl -noshell -s tt_sup start_shell

我如何与主管一起运行简单的gen_tcp:connect(gen_server)?

主管:

-module(tt_sup).
-behaviour(supervisor).
-export([init/1, start_link/0, start_shell/0]).

start_link() ->
    io:format("Supervisor started with PID~p~n", [self()]),
    {ok, Pid} = supervisor:start_link(tt_sup, []),
    io:format("Supervisor PID=~p~n", [Pid]),
    {ok, Pid}.

start_shell() ->
    io:format("Supervisor started with PID~p~n", [self()]),
    {ok, Pid} = supervisor:start_link(tt_sup, []),
    io:format("Supervisor PID=~p~n", [Pid]),
    unlink(Pid),
    {ok, Pid}.

init(_Args) ->
    SupFlags = #{strategy => one_for_one},
    Child = [#{id => ttest, start => {ttest, start, []},
               restart => permanent, shutdown => brutal_kill,
               type => worker, modules => [ttest]}],
    {ok, {SupFlags, Child}}.

gen_server:

-module(ttest).
-export([start/0,init/1,handle_cast/2,handle_call/3,handle_info/2,terminate/2,connect/1]).
-behaviour(gen_server).



start() ->

       io:format("gen_server start id is ~p~n",[self()]),
       {ok,Pid} = gen_server:start_link({local,ttest},ttest,[],[]),
       io:format("gen_server id is ~p~n",[Pid]),
       connect(Pid),
       {ok,Pid}.



init(_Args) ->
        io:format("init id is ~p~n",[self()]),
        {ok,[]}.       
handle_call({tcp,Socket,Bin},_From,States) ->
        {reply,States,States}.
handle_info({tcp,Socket,Bin},States) ->
        io:format("got info msg"),
        {noreply,States}.

handle_cast({send,Msg},States) ->
        {reply,States}.

connect(I) ->
    io:format("connect id is ~p~n",[self()]),
    {ok,Socket} =gen_tcp:connect("localhost",6000,[binary,{active,true}]),
    gen_tcp:controlling_process(Socket,I).



terminate(shutdown, State) ->
    io:format("terminating"),
    ok.
乔斯·M

没有更多代码执行时运行-s退出的过程normal主管接收信号和因为它从它的父是,它退出(无论它是的normal),如在解释gen_server:终止/ 2supervisors为gen_servers的trap_exit活性):

即使gen_server进程不是监督树的一部分,但如果它从其父级接收到“ EXIT”消息,也会调用此函数。原因与“退出”消息中的相同。

我没有测试你的代码,但如果添加process_flag(trap_exit, true)到你的gen_server,你一定会复制这种行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在Erlang Shell中未定义gen_tcp?

来自分类Dev

用户关闭Excel时将工作表写入CSV

来自分类Dev

Django:使用自定义用户模型创建超级用户

来自分类Dev

用户注销时Xampp关闭

来自分类Dev

Erlang gen_tcp关闭GCDAsynchSocket出错的端口

来自分类Dev

应用启动时将一些参数传递给超级用户初始化函数

来自分类Dev

使用Apache brooklyn创建具有超级用户特权的用户

来自分类Dev

Erlang gen_tcp:recv http_request abs_path

来自分类Dev

使用Erlang的gen_tcp模块在Elixir上使用TCP侦听器

来自分类Dev

客户端在发送消息后关闭,为什么gen_tcp和opts {active,false}接受两次

来自分类Dev

在erlang中中断gen_tcp:recv

来自分类Dev

监督gen_tcp客户端/服务器

来自分类Dev

使用超级用户Django 1.9,Python 3.5和超级用户的凭据测试登录

来自分类Dev

gen_tcp:recv / 2返回错误,einval

来自分类Dev

使用gen_tcp:send / 2通过套接字发送消息

来自分类Dev

与gen_tcp并行建立大量连接时出现CLOSED错误(错误?)

来自分类Dev

如何使用gen_tcp在Elixir中的活动套接字上检测TCP超时?

来自分类Dev

有什么办法可以通过gen_tcp获取ether / ip头吗?

来自分类Dev

使用超级用户时,nginx不会从fcgiwrap返回错误

来自分类Dev

gen_tcp:使用超级用户时,connect将关闭

来自分类Dev

如何在创建用户类型时自动设置超级用户

来自分类Dev

接收TCP数据包作为消息,而不是使用gen_tcp:recv / 2

来自分类Dev

如何检测gen_tcp与tcp-client的断开连接?

来自分类Dev

Erlang gen_tcp:recv http_request abs_path

来自分类Dev

使用cmake时是否可以以超级用户身份执行命令?

来自分类Dev

如何使用gen_tcp在Elixir中的活动套接字上检测TCP超时?

来自分类Dev

Erlang:使用超级用户:start_child / 2在gen_server:init / 1内添加新的子代将挂断应用程序

来自分类Dev

使用 gen_tcp 的 Erlang 客户端-服务器示例未收到任何信息

来自分类Dev

如何从 gen_tcp:accept/1 返回的套接字获取 MAC 地址?

Related 相关文章

  1. 1

    为什么在Erlang Shell中未定义gen_tcp?

  2. 2

    用户关闭Excel时将工作表写入CSV

  3. 3

    Django:使用自定义用户模型创建超级用户

  4. 4

    用户注销时Xampp关闭

  5. 5

    Erlang gen_tcp关闭GCDAsynchSocket出错的端口

  6. 6

    应用启动时将一些参数传递给超级用户初始化函数

  7. 7

    使用Apache brooklyn创建具有超级用户特权的用户

  8. 8

    Erlang gen_tcp:recv http_request abs_path

  9. 9

    使用Erlang的gen_tcp模块在Elixir上使用TCP侦听器

  10. 10

    客户端在发送消息后关闭,为什么gen_tcp和opts {active,false}接受两次

  11. 11

    在erlang中中断gen_tcp:recv

  12. 12

    监督gen_tcp客户端/服务器

  13. 13

    使用超级用户Django 1.9,Python 3.5和超级用户的凭据测试登录

  14. 14

    gen_tcp:recv / 2返回错误,einval

  15. 15

    使用gen_tcp:send / 2通过套接字发送消息

  16. 16

    与gen_tcp并行建立大量连接时出现CLOSED错误(错误?)

  17. 17

    如何使用gen_tcp在Elixir中的活动套接字上检测TCP超时?

  18. 18

    有什么办法可以通过gen_tcp获取ether / ip头吗?

  19. 19

    使用超级用户时,nginx不会从fcgiwrap返回错误

  20. 20

    gen_tcp:使用超级用户时,connect将关闭

  21. 21

    如何在创建用户类型时自动设置超级用户

  22. 22

    接收TCP数据包作为消息,而不是使用gen_tcp:recv / 2

  23. 23

    如何检测gen_tcp与tcp-client的断开连接?

  24. 24

    Erlang gen_tcp:recv http_request abs_path

  25. 25

    使用cmake时是否可以以超级用户身份执行命令?

  26. 26

    如何使用gen_tcp在Elixir中的活动套接字上检测TCP超时?

  27. 27

    Erlang:使用超级用户:start_child / 2在gen_server:init / 1内添加新的子代将挂断应用程序

  28. 28

    使用 gen_tcp 的 Erlang 客户端-服务器示例未收到任何信息

  29. 29

    如何从 gen_tcp:accept/1 返回的套接字获取 MAC 地址?

热门标签

归档