Erlang 异步accept

-module(myserver).
-behaviour(gen_server).

%%define
-define(POLICY_PORT,8080). %%监听端口
-record(state, {callback, sock, ref,disable_connect}).


%%%gen_server callback
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

-define(TCP_OPTION,[
					binary,
					{packet,0},
					{active,false},
					{reuseaddr, true}
					]).
					
-export([start_link/0,start_server/0,loop/1]).

init([])->
	 process_flag(trap_exit, true),
	 %%{ok, test_info()}.
	 start_server().

handle_call(_Request,_From,_State)->
	Reply = ok,
	{reply,Reply,_State}.

handle_cast(_Msg,_State) ->
	{noreply,_State}.

handle_info({inet_async, LSock, Ref, {ok, Sock}},_State)->
	io:format("connect  ...~n",[]),
	{noreply,_State};
handle_info(_Info,_State) ->
	{noreply,_State}.

terminate(_Reason,_State) ->
	io:format("I'm terminate.........~n"),
	ok.

code_change(_OldVsn, State, _Extra) ->
    {ok, State}.

%% ====================================================================
%% Internal functions
%% ====================================================================

start_link() ->
	io:format("~p start..~n",[self()]),
	gen_server:start_link({local,?MODULE}, ?MODULE, [], []).

start_server() ->
	case gen_tcp:listen(?POLICY_PORT, ?TCP_OPTION) of
		 {ok,LSock} ->
				%%io:format("listen ok~p~n", []),
				loop(LSock);
		{error,Reason} ->
  				{stop,Reason}
    end.

loop(LSock) ->
    prim_inet:async_accept(LSock, -1). %%%

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值