From 4d198cb07025a8fc341a1e7fd7f9906b5fb714d6 Mon Sep 17 00:00:00 2001 From: Lukas Larsson Date: Sun, 27 Nov 2011 17:24:04 +0100 Subject: Only allow tcp sockets as target for sendfile --- erts/preloaded/src/prim_file.erl | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/erts/preloaded/src/prim_file.erl b/erts/preloaded/src/prim_file.erl index fb19521382..6f35162feb 100644 --- a/erts/preloaded/src/prim_file.erl +++ b/erts/preloaded/src/prim_file.erl @@ -545,17 +545,24 @@ write_file(_, _) -> %sendfile(_,_,_,_,_,_,_,_,_,_) -> % {error, enotsup}; sendfile(#file_descriptor{module = ?MODULE, data = {Port, _}}, - DestFD, Offset, Bytes, ChunkSize, Headers, Trailers, - Nodiskio, MNowait, Sync) -> - drv_command(Port, [<>, - Headers,Trailers]). + Dest, Offset, Bytes, _ChunkSize, _Headers, _Trailers, + _Nodiskio, _MNowait, _Sync) -> + case erlang:port_get_data(Dest) of + Data when Data == inet_tcp; Data == inet6_tcp -> + ok = inet:lock_socket(Dest,true), + {ok, DestFD} = prim_inet:getfd(Dest), + try drv_command(Port, [<>]) + after + ok = inet:lock_socket(Dest,false) + end; + _Else -> + {error,badarg} + end. get_bit(true) -> 1; -- cgit v1.2.3