aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/kernel/src/file_io_server.erl9
-rw-r--r--lib/kernel/src/gen_tcp.erl18
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);