aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2011-03-20 16:09:05 +0100
committerLoïc Hoguin <[email protected]>2011-03-20 16:09:05 +0100
commitd69d0adfa72383736fe9705f5060881baefe2d21 (patch)
tree32f5c8f9bad92f469a96c7f2d0de80b9395b0474
parentf5e7178651b077b956ed75db4bce3fa5ae4512e6 (diff)
downloadcowboy-d69d0adfa72383736fe9705f5060881baefe2d21.tar.gz
cowboy-d69d0adfa72383736fe9705f5060881baefe2d21.tar.bz2
cowboy-d69d0adfa72383736fe9705f5060881baefe2d21.zip
Lazy-retrieve the peer name and port to avoid wasting time each request.
-rw-r--r--src/cowboy_http_protocol.erl3
-rw-r--r--src/cowboy_http_req.erl3
2 files changed, 4 insertions, 2 deletions
diff --git a/src/cowboy_http_protocol.erl b/src/cowboy_http_protocol.erl
index 2847646..f6047bf 100644
--- a/src/cowboy_http_protocol.erl
+++ b/src/cowboy_http_protocol.erl
@@ -65,11 +65,10 @@ request({http_request, _Method, _URI, Version}, State)
request({http_request, Method, {abs_path, AbsPath}, Version},
State=#state{socket=Socket, transport=Transport}) ->
{Path, RawPath, Qs} = cowboy_dispatcher:split_path(AbsPath),
- {ok, Peer} = Transport:peername(Socket),
ConnAtom = version_to_connection(Version),
wait_header(#http_req{socket=Socket, transport=Transport,
connection=ConnAtom, method=Method, version=Version,
- peer=Peer, path=Path, raw_path=RawPath, raw_qs=Qs}, State);
+ path=Path, raw_path=RawPath, raw_qs=Qs}, State);
request({http_request, Method, '*', Version},
State=#state{socket=Socket, transport=Transport}) ->
{ok, Peer} = Transport:peername(Socket),
diff --git a/src/cowboy_http_req.erl b/src/cowboy_http_req.erl
index 1938bc7..3dcac2f 100644
--- a/src/cowboy_http_req.erl
+++ b/src/cowboy_http_req.erl
@@ -44,6 +44,9 @@ version(Req) ->
-spec peer(Req::#http_req{})
-> {{Address::ip_address(), Port::port_number()}, Req::#http_req{}}.
+peer(Req=#http_req{socket=Socket, transport=Transport, peer=undefined}) ->
+ {ok, Peer} = Transport:peername(Socket),
+ {Peer, Req#http_req{peer=Peer}};
peer(Req) ->
{Req#http_req.peer, Req}.