summaryrefslogtreecommitdiff
path: root/src/mochiweb/mochiweb_socket_server.erl
diff options
context:
space:
mode:
authorChristopher Lenz <cmlenz@apache.org>2008-04-30 00:45:50 +0000
committerChristopher Lenz <cmlenz@apache.org>2008-04-30 00:45:50 +0000
commit2f40a05f2631b9c92758720c2e9703cb0c9198d7 (patch)
tree1a3bee7cc5e62f1f8f88e4727b3d92f70dd0787b /src/mochiweb/mochiweb_socket_server.erl
parent31168059f61685443a30450dc0a0623e11f1bbc6 (diff)
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
Diffstat (limited to 'src/mochiweb/mochiweb_socket_server.erl')
-rw-r--r--src/mochiweb/mochiweb_socket_server.erl134
1 files changed, 67 insertions, 67 deletions
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}]),