From 8f8a03ba3556f2c2c70797bedf5d44b360659425 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang-solutions.com>
Date: Fri, 17 Jan 2014 14:37:39 +0100
Subject: erts: fix bug when using passive mode and sendfile

The bug incorrectly issued driver_select when un-ignoring an fd
for a socket in passive mode, which caused an incorrect error
tuple to be returned when the remote end closed the connection.
---
 lib/kernel/test/sendfile_SUITE.erl | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

(limited to 'lib/kernel')

diff --git a/lib/kernel/test/sendfile_SUITE.erl b/lib/kernel/test/sendfile_SUITE.erl
index 4cf4c6489d..24884bada5 100644
--- a/lib/kernel/test/sendfile_SUITE.erl
+++ b/lib/kernel/test/sendfile_SUITE.erl
@@ -33,6 +33,7 @@ all() ->
      ,t_sendfile_offset
      ,t_sendfile_sendafter
      ,t_sendfile_recvafter
+     ,t_sendfile_recvafter_remoteclose
      ,t_sendfile_sendduring
      ,t_sendfile_recvduring
      ,t_sendfile_closeduring
@@ -228,6 +229,25 @@ t_sendfile_recvafter(Config) ->
 
     ok = sendfile_send(Send).
 
+%% This tests specifically for a bug fixed in 17.0
+t_sendfile_recvafter_remoteclose(Config) ->
+    Filename = proplists:get_value(small_file, Config),
+
+    Send = fun(Sock, SFServer) ->
+		   {Size, _Data} = sendfile_file_info(Filename),
+		   {ok, Size} = file:sendfile(Filename, Sock),
+
+		   %% Make sure the remote end has been closed
+		   SFServer ! stop,
+		   timer:sleep(100),
+
+		   %% In the bug this returned {error,ebadf}
+		   {error,closed} = gen_tcp:recv(Sock, 1),
+		   -1
+	   end,
+
+    ok = sendfile_send({127,0,0,1},Send,0).
+
 t_sendfile_sendduring(Config) ->
     Filename = proplists:get_value(big_file, Config),
 
-- 
cgit v1.2.3