summaryrefslogtreecommitdiff
path: root/src/couchdb/couch_httpd.erl
diff options
context:
space:
mode:
authorFilipe David Borba Manana <fdmanana@apache.org>2011-02-01 06:47:32 +0000
committerFilipe David Borba Manana <fdmanana@apache.org>2011-02-01 06:47:32 +0000
commit9f0ae92b4f4c0762214092cf8d50675d01c847ab (patch)
treeb833c6b60d5cd91950ab6b6c47e53966e751b238 /src/couchdb/couch_httpd.erl
parent7d139047706621e21cb73ffc2dc238be8f03db48 (diff)
Backport COUCHDB-1008 from trunk (revision 1055592)
The motivation for this backport is to prevent the "nodelay" option, under section "httpd", from reaching version 1.1. This patch introduces the "socket_options" configuration parameter which is more generic - it allows nodelay as well as other socket options to be specified. Not adding this patch to 1.1.x would imply still supporting the "nodelay" parameter in future releases to avoid breaking the configuration API. git-svn-id: https://svn.apache.org/repos/asf/couchdb/branches/1.1.x@1065922 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/couch_httpd.erl')
-rw-r--r--src/couchdb/couch_httpd.erl21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/couchdb/couch_httpd.erl b/src/couchdb/couch_httpd.erl
index dc98957c..47d2edb7 100644
--- a/src/couchdb/couch_httpd.erl
+++ b/src/couchdb/couch_httpd.erl
@@ -57,8 +57,6 @@ start_link(Name, Options) ->
% will restart us and then we will pick up the new settings.
BindAddress = couch_config:get("httpd", "bind_address", any),
- NoDelay = "true" == couch_config:get("httpd", "nodelay", "false"),
-
DefaultSpec = "{couch_httpd_db, handle_request}",
DefaultFun = make_arity_1_fun(
couch_config:get("httpd", "default_handler", DefaultSpec)
@@ -82,7 +80,17 @@ start_link(Name, Options) ->
UrlHandlers = dict:from_list(UrlHandlersList),
DbUrlHandlers = dict:from_list(DbUrlHandlersList),
DesignUrlHandlers = dict:from_list(DesignUrlHandlersList),
+ {ok, ServerOptions} = couch_util:parse_term(
+ couch_config:get("httpd", "server_options", "[]")),
+ {ok, SocketOptions} = couch_util:parse_term(
+ couch_config:get("httpd", "socket_options", "[]")),
Loop = fun(Req)->
+ case SocketOptions of
+ [] ->
+ ok;
+ _ ->
+ ok = mochiweb_socket:setopts(Req:get(socket), SocketOptions)
+ end,
apply(?MODULE, handle_request, [
Req, DefaultFun, UrlHandlers, DbUrlHandlers, DesignUrlHandlers
])
@@ -90,11 +98,10 @@ start_link(Name, Options) ->
% and off we go
- {ok, Pid} = case mochiweb_http:start(Options ++ [
+ {ok, Pid} = case mochiweb_http:start(Options ++ ServerOptions ++ [
{loop, Loop},
{name, Name},
- {ip, BindAddress},
- {nodelay,NoDelay}
+ {ip, BindAddress}
]) of
{ok, MochiPid} -> {ok, MochiPid};
{error, Reason} ->
@@ -109,6 +116,10 @@ start_link(Name, Options) ->
?MODULE:stop();
("httpd", "default_handler") ->
?MODULE:stop();
+ ("httpd", "server_options") ->
+ ?MODULE:stop();
+ ("httpd", "socket_options") ->
+ ?MODULE:stop();
("httpd_global_handlers", _) ->
?MODULE:stop();
("httpd_db_handlers", _) ->