diff options
-rw-r--r-- | lib/kernel/src/file_io_server.erl | 9 | ||||
-rw-r--r-- | lib/kernel/src/gen_tcp.erl | 18 |
2 files changed, 5 insertions, 22 deletions
diff --git a/lib/kernel/src/file_io_server.erl b/lib/kernel/src/file_io_server.erl index 7280635f53..14da9c1a55 100644 --- a/lib/kernel/src/file_io_server.erl +++ b/lib/kernel/src/file_io_server.erl @@ -249,15 +249,6 @@ file_request(close, file_request({position,At}, #state{handle=Handle,buf=Buf}=State) -> std_reply(position(Handle, At, Buf), State); -file_request({sendfile,DestSock,Offset,Bytes,Opts}, - #state{handle=Handle}=State) -> - %% gen_tcp will call prim_file:sendfile with correct arguments - case gen_tcp:sendfile(Handle, DestSock, Offset, Bytes, Opts) of - {error,_}=Reply -> - {stop,normal,Reply,State}; - Reply -> - {reply,Reply,State} - end; file_request(truncate, #state{handle=Handle}=State) -> case ?PRIM_FILE:truncate(Handle) of diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl index 3f1e432f7a..9dd70ce5cc 100644 --- a/lib/kernel/src/gen_tcp.erl +++ b/lib/kernel/src/gen_tcp.erl @@ -317,23 +317,15 @@ unrecv(S, Data) when is_port(S) -> -define(MAX_CHUNK_SIZE, (1 bsl 20)*20). %% 20 MB, has to fit in primary memory -spec sendfile(File, Sock, Offset, Bytes, Opts) -> - {'ok', non_neg_integer()} | {'error', inet:posix()} when - File :: file:io_device(), + {'ok', non_neg_integer()} | {'error', inet:posix() } | + {'error', not_owner} when + File :: file:fd(), Sock :: socket(), Offset :: non_neg_integer(), Bytes :: non_neg_integer(), Opts :: [sendfile_option()]. -sendfile(File, Sock, Offset, Bytes, Opts) when is_pid(File) -> - Ref = erlang:monitor(process, File), - File ! {file_request,self(),File, - {sendfile,Sock,Offset,Bytes,Opts}}, - receive - {file_reply,File,Reply} -> - erlang:demonitor(Ref,[flush]), - Reply; - {'DOWN', Ref, _, _, _} -> - {error, terminated} - end; +sendfile(File, _Sock, _Offet, _Bytes, _Opts) when is_pid(File) -> + {error, badarg}; sendfile(File, Sock, Offset, Bytes, []) -> sendfile(File, Sock, Offset, Bytes, ?MAX_CHUNK_SIZE, undefined, undefined, false, false, false); |