aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_protocol.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/cowboy_protocol.erl')
-rw-r--r--src/cowboy_protocol.erl18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/cowboy_protocol.erl b/src/cowboy_protocol.erl
index b479fa9..caf0806 100644
--- a/src/cowboy_protocol.erl
+++ b/src/cowboy_protocol.erl
@@ -463,10 +463,16 @@ request(Buffer, State=#state{socket=Socket, transport=Transport,
req_keepalive=ReqKeepalive, max_keepalive=MaxKeepalive,
compress=Compress, onresponse=OnResponse},
Method, Path, Query, Fragment, Version, Headers, Host, Port) ->
- Req = cowboy_req:new(Socket, Transport, Method, Path, Query, Fragment,
- Version, Headers, Host, Port, Buffer, ReqKeepalive < MaxKeepalive,
- Compress, OnResponse),
- onrequest(Req, State).
+ case Transport:peername(Socket) of
+ {ok, Peer} ->
+ Req = cowboy_req:new(Socket, Transport, Peer, Method, Path,
+ Query, Fragment, Version, Headers, Host, Port, Buffer,
+ ReqKeepalive < MaxKeepalive, Compress, OnResponse),
+ onrequest(Req, State);
+ {error, _} ->
+ %% Couldn't read the peer address; connection is gone.
+ terminate(State)
+ end.
%% Call the global onrequest callback. The callback can send a reply,
%% in which case we consider the request handled and move on to the next
@@ -562,8 +568,8 @@ error_terminate(Code, State=#state{socket=Socket, transport=Transport,
{cowboy_req, resp_sent} -> ok
after 0 ->
_ = cowboy_req:reply(Code, cowboy_req:new(Socket, Transport,
- <<"GET">>, <<>>, <<>>, <<>>, {1, 1}, [], <<>>, undefined,
- <<>>, false, Compress, OnResponse)),
+ undefined, <<"GET">>, <<>>, <<>>, <<>>, {1, 1}, [], <<>>,
+ undefined, <<>>, false, Compress, OnResponse)),
ok
end,
terminate(State).