From b177f1baad04255d3c1cdfa92a48fc01b3af36ac Mon Sep 17 00:00:00 2001 From: Peter Lemenkov <lemenkov@gmail.com> Date: Sat, 9 Mar 2013 12:24:13 +0400 Subject: [PATCH 1/2] Workaround for missing file:sendfile/2 in R14B Signed-off-by: Peter Lemenkov <lemenkov@gmail.com> --- src/ranch_tcp.erl | 16 +++++++++++++++- 1 files changed, 15 insertions(+), 1 deletions(-) diff --git a/src/ranch_tcp.erl b/src/ranch_tcp.erl index bb7ad55..3014123 100644 --- a/src/ranch_tcp.erl +++ b/src/ranch_tcp.erl @@ -114,7 +114,21 @@ send(Socket, Packet) -> -spec sendfile(inet:socket(), file:name()) -> {ok, non_neg_integer()} | {error, atom()}. sendfile(Socket, Filename) -> - file:sendfile(Filename, Socket). + sendfile(Filename, Socket, 0). + +sendfile(Socket, IoDevice, Sent) -> + case file:read(IoDevice, 16#1FFF) of + eof -> + ok = file:close(IoDevice), + {ok, Sent}; + {ok, Bin} -> + case gen_tcp:send(Socket, Bin) of + ok -> + sendfile(Socket, IoDevice, Sent + byte_size(Bin)); + {error, Reason} -> + {error, Reason} + end + end. %% @doc Set options on the given socket. %% @see inet:setopts/2 -- 1.7.1