diff options
Diffstat (limited to 'lib/kernel/src/gen_tcp.erl')
-rw-r--r-- | lib/kernel/src/gen_tcp.erl | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl index 56eca4cda4..ea25dc3dc3 100644 --- a/lib/kernel/src/gen_tcp.erl +++ b/lib/kernel/src/gen_tcp.erl @@ -421,12 +421,15 @@ mod([], Address) -> sendfile(#file_descriptor{ module = Mod } = Fd, Sock, Offset, Bytes, ChunkSize, Headers, Trailers, Nodiskio, MNowait, Sync) when is_port(Sock) -> - case Mod:sendfile(Fd, Sock, Offset, Bytes, ChunkSize, Headers, Trailers, + {ok,SockFd} = prim_inet:stealfd(Sock), + case Mod:sendfile(Fd, SockFd, Offset, Bytes, ChunkSize, Headers, Trailers, Nodiskio, MNowait, Sync) of {error, enotsup} -> + prim_inet:returnfd(Sock), sendfile_fallback(Fd, Sock, Offset, Bytes, ChunkSize, Headers, Trailers); Else -> + prim_inet:returnfd(Sock), Else end; sendfile(_,_,_,_,_,_,_,_,_,_) -> |