From 2f40a05f2631b9c92758720c2e9703cb0c9198d7 Mon Sep 17 00:00:00 2001 From: Christopher Lenz Date: Wed, 30 Apr 2008 00:45:50 +0000 Subject: Update MochiWeb code in trunk to r66. git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@652206 13f79535-47bb-0310-9956-ffa450edef68 --- src/mochiweb/mochiweb_socket_server.erl | 134 ++++++++++++++++---------------- 1 file changed, 67 insertions(+), 67 deletions(-) (limited to 'src/mochiweb/mochiweb_socket_server.erl') diff --git a/src/mochiweb/mochiweb_socket_server.erl b/src/mochiweb/mochiweb_socket_server.erl index 764481c4..a88ace76 100644 --- a/src/mochiweb/mochiweb_socket_server.erl +++ b/src/mochiweb/mochiweb_socket_server.erl @@ -9,19 +9,19 @@ -export([start/1, stop/1]). -export([init/1, handle_call/3, handle_cast/2, terminate/2, code_change/3, - handle_info/2]). + handle_info/2]). -export([get/2]). -export([acceptor_loop/1]). -record(mochiweb_socket_server, - {port, - loop, - name=undefined, - max=2048, - ip=any, - listen=null, - acceptor=null, + {port, + loop, + name=undefined, + max=2048, + ip=any, + listen=null, + acceptor=null, backlog=30}). start(State=#mochiweb_socket_server{}) -> @@ -66,14 +66,14 @@ parse_options([{port, Port} | Rest], State) -> parse_options(Rest, State#mochiweb_socket_server{port=Port}); parse_options([{ip, Ip} | Rest], State) -> ParsedIp = case Ip of - any -> - any; - Ip when is_tuple(Ip) -> - Ip; - Ip when is_list(Ip) -> - {ok, IpTuple} = inet_parse:address(Ip), - IpTuple - end, + any -> + any; + Ip when is_tuple(Ip) -> + Ip; + Ip when is_list(Ip) -> + {ok, IpTuple} = inet_parse:address(Ip), + IpTuple + end, parse_options(Rest, State#mochiweb_socket_server{ip=ParsedIp}); parse_options([{loop, Loop} | Rest], State) -> parse_options(Rest, State#mochiweb_socket_server{loop=Loop}); @@ -81,35 +81,35 @@ parse_options([{backlog, Backlog} | Rest], State) -> parse_options(Rest, State#mochiweb_socket_server{backlog=Backlog}); parse_options([{max, Max} | Rest], State) -> MaxInt = case Max of - Max when is_list(Max) -> - list_to_integer(Max); - Max when is_integer(Max) -> - Max - end, + Max when is_list(Max) -> + list_to_integer(Max); + Max when is_integer(Max) -> + Max + end, parse_options(Rest, State#mochiweb_socket_server{max=MaxInt}). start_server(State=#mochiweb_socket_server{name=Name}) -> case Name of - undefined -> - gen_server:start_link(?MODULE, State, []); - _ -> - gen_server:start_link(Name, ?MODULE, State, []) + undefined -> + gen_server:start_link(?MODULE, State, []); + _ -> + gen_server:start_link(Name, ?MODULE, State, []) end. init(State=#mochiweb_socket_server{ip=Ip, port=Port, backlog=Backlog}) -> process_flag(trap_exit, true), BaseOpts = [binary, - {reuseaddr, true}, - {packet, 0}, - {backlog, Backlog}, - {recbuf, 8192}, - {active, false}], + {reuseaddr, true}, + {packet, 0}, + {backlog, Backlog}, + {recbuf, 8192}, + {active, false}], Opts = case Ip of - any -> - BaseOpts; - Ip -> - [{ip, Ip} | BaseOpts] - end, + any -> + BaseOpts; + Ip -> + [{ip, Ip} | BaseOpts] + end, case gen_tcp_listen(Port, Opts, State) of {stop, eacces} -> case Port < 1024 of @@ -135,11 +135,11 @@ init(State=#mochiweb_socket_server{ip=Ip, port=Port, backlog=Backlog}) -> gen_tcp_listen(Port, Opts, State) -> case gen_tcp:listen(Port, Opts) of {ok, Listen} -> - {ok, ListenPort} = inet:port(Listen), - {ok, new_acceptor(State#mochiweb_socket_server{listen=Listen, + {ok, ListenPort} = inet:port(Listen), + {ok, new_acceptor(State#mochiweb_socket_server{listen=Listen, port=ListenPort})}; - {error, Reason} -> - {stop, Reason} + {error, Reason} -> + {stop, Reason} end. new_acceptor(State=#mochiweb_socket_server{max=0}) -> @@ -147,7 +147,7 @@ new_acceptor(State=#mochiweb_socket_server{max=0}) -> State#mochiweb_socket_server{acceptor=null}; new_acceptor(State=#mochiweb_socket_server{listen=Listen,loop=Loop}) -> Pid = proc_lib:spawn_link(?MODULE, acceptor_loop, - [{self(), Listen, Loop}]), + [{self(), Listen, Loop}]), State#mochiweb_socket_server{acceptor=Pid}. call_loop({M, F}, Socket) -> @@ -157,19 +157,19 @@ call_loop(Loop, Socket) -> acceptor_loop({Server, Listen, Loop}) -> case catch gen_tcp:accept(Listen) of - {ok, Socket} -> - gen_server:cast(Server, {accepted, self()}), - call_loop(Loop, Socket); - {error, closed} -> - exit({error, closed}); - Other -> - error_logger:error_report( - [{application, mochiweb}, - "Accept failed error", - lists:flatten(io_lib:format("~p", [Other]))]), - exit({error, accept_failed}) + {ok, Socket} -> + gen_server:cast(Server, {accepted, self()}), + call_loop(Loop, Socket); + {error, closed} -> + exit({error, closed}); + Other -> + error_logger:error_report( + [{application, mochiweb}, + "Accept failed error", + lists:flatten(io_lib:format("~p", [Other]))]), + exit({error, accept_failed}) end. - + do_get(port, #mochiweb_socket_server{port=Port}) -> Port. @@ -182,7 +182,7 @@ handle_call(_Message, _From, State) -> {reply, Res, State}. handle_cast({accepted, Pid}, - State=#mochiweb_socket_server{acceptor=Pid, max=Max}) -> + State=#mochiweb_socket_server{acceptor=Pid, max=Max}) -> % io:format("accepted ~p~n", [Pid]), State1 = State#mochiweb_socket_server{max=Max - 1}, {noreply, new_acceptor(State1)}; @@ -203,31 +203,31 @@ code_change(_OldVsn, State, _Extra) -> State. handle_info({'EXIT', Pid, normal}, - State=#mochiweb_socket_server{acceptor=Pid}) -> + State=#mochiweb_socket_server{acceptor=Pid}) -> % io:format("normal acceptor down~n"), {noreply, new_acceptor(State)}; handle_info({'EXIT', Pid, Reason}, - State=#mochiweb_socket_server{acceptor=Pid}) -> + State=#mochiweb_socket_server{acceptor=Pid}) -> error_logger:error_report({?MODULE, ?LINE, - {acceptor_error, Reason}}), + {acceptor_error, Reason}}), timer:sleep(100), {noreply, new_acceptor(State)}; handle_info({'EXIT', _LoopPid, Reason}, - State=#mochiweb_socket_server{acceptor=Pid, max=Max}) -> + State=#mochiweb_socket_server{acceptor=Pid, max=Max}) -> case Reason of - normal -> - ok; - _ -> - error_logger:error_report({?MODULE, ?LINE, - {child_error, Reason}}) + normal -> + ok; + _ -> + error_logger:error_report({?MODULE, ?LINE, + {child_error, Reason}}) end, State1 = State#mochiweb_socket_server{max=Max + 1}, State2 = case Pid of - null -> - new_acceptor(State1); - _ -> - State1 - end, + null -> + new_acceptor(State1); + _ -> + State1 + end, {noreply, State2}; handle_info(Info, State) -> error_logger:info_report([{'INFO', Info}, {'State', State}]), -- cgit v1.2.3