本文用于验证,在erlang中 一个进程可以控制多个socket通信。验证程序如下:
-module(test_tcp).
-compile(export_all).
-include_lib("kernel/include/inet.hrl").
-define(TCP_OPTIONS, [
binary,
{packet, 0},
{active, once},
{exit_on_close, true},
{reuseaddr, true} ]).
test() ->
Pid = spawn_link(?MODULE, loop, []),
{ok, Listen} = gen_tcp:listen(6099, ?TCP_OPTIONS),
loop_listen(Listen, Pid).
loop_listen(Listen, Pid) ->
{ok, Sock} = gen_tcp:accept(Listen),
gen_tcp:controlling_process(Sock, Pid),
loop_listen(Listen, Pid).
loop() ->
receive
{tcp, Sock, Bin} ->
io:format("rcv from ~p: ~p", [Sock, Bin]),
inet:setopts(Sock, [{active, once}]),
loop()
end.