一个进程控制多个socket

本文用于验证,在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.


启动本脚本;外界可以连接6099端口,发送数据。可以看到,不同的连接发送的数据,被同一个控制进程捕获到。



你可能感兴趣的:(一个进程控制多个socket)