网站开发实践感想,温州外贸公司网站建设公司排名,企业营业执照怎么查,怎么做网站弹幕转自#xff1a;http://blog.csdn.net/summerhust/article/details/8740973 一旦打开了一个使用#xff34;#xff23;#xff30;连接的套接字#xff0c;它就始终保持打开状态#xff0c;直至任何一方关闭它或因为一个错误而终止。在建立一个连接时#xff0c;一般为…转自http://blog.csdn.net/summerhust/article/details/8740973 一旦打开了一个使用连接的套接字它就始终保持打开状态直至任何一方关闭它或因为一个错误而终止。在建立一个连接时一般为每一次请求产生一个新进程只要有请求被处理就保持这个进程的存活。 假设有一个监听进程其任务是等待传入的请求。只要一个请求到达响应该连接请求的进程就变成了接收进程有种方案 1. 产生新的进程并成为接收进程而监听者返回并继续监听下一个新的连接请求 server() - {ok, ListenSocket} gen_tcp:listen(1234, [binary, {active, false}]), wait_connect(ListenSocket,0). wait_connect(ListenSocket, Count) - {ok, Socket} gen_tcp:accept(ListenSocket), Pid spawn(?MODULE, get_request, [Socket, [], Count]), %将该套接字的控制进程改为Pid进程 gen_tcp:controlling_process(Socket, Pid), wait_connect(ListenSocket, Count1). get_request(Socket, BinaryList, Count) - case gen_tcp:recv(Socket, 0, 5000) of {ok, Binary} - io:format(received data: ~p~n, [binary_to_list(Binary)]), get_request(Socket, [Binary|BinaryList], Count); {error, closed} - handle(lists:reverse(BinaryList), Count) end. 2. 使监听进程成为接收进程并使产生的新进程成为新的监听者 server() - {ok, ListenSocket} gen_tcp:listen(1234, [binary, {active, false}]), wait_connect(ListenSocket,0). wait_connect(ListenSocket, Count) - {ok, Socket} gen_tcp:accept(ListenSocket), spawn(?MODULE, wait_connect, [ListenSocket, Count1]), get_request(Socket, [], Count). 说明 (1) 创建一个套接字的进程通过调用gen_tcp:accept或gen_tcp:connect也就是该套接字的控制进程该套接字所收到的任何消息都会转发给这个控制进程如果控制进程消亡那么该套接字也会自行关闭。我们可以通过gen_tcp:controlling_process(Socket, NewPid)函数来把一个套接字的控制进程改为新的控制进程NewPid (2) gen_tcp:accept和gen_tcp:recv是阻塞的可以用prim_inet:async_accept和prim_inet:async_recv实现非阻塞。