barbieri pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=c534d7912434d0d0fdc6adf1941f0bddac640dd7

commit c534d7912434d0d0fdc6adf1941f0bddac640dd7
Author: Gustavo Sverzut Barbieri <[email protected]>
Date:   Fri Nov 25 01:24:38 2016 -0200

    efl_net_socket_fd: stop monitoring fd on EOS.
    
    There was a bug that if the remote peer closed the connection, it
    would trigger 'read' event, which would read 0 bytes, flagging as
    EOS... but then marking as "can_read", which was wrong.
    
    Just stop monitoring the events and fix that.
---
 src/lib/ecore_con/efl_net_socket_fd.c  | 15 +++++++++++++++
 src/lib/ecore_con/efl_net_socket_fd.eo |  1 +
 2 files changed, 16 insertions(+)

diff --git a/src/lib/ecore_con/efl_net_socket_fd.c 
b/src/lib/ecore_con/efl_net_socket_fd.c
index 822154c..e2ddcc2 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.c
+++ b/src/lib/ecore_con/efl_net_socket_fd.c
@@ -238,6 +238,21 @@ _efl_net_socket_fd_efl_io_reader_can_read_set(Eo *o, 
Efl_Net_Socket_Fd_Data *pd
      }
 }
 
+EOLIAN static void
+_efl_net_socket_fd_efl_io_reader_eos_set(Eo *o, Efl_Net_Socket_Fd_Data *pd 
EINA_UNUSED, Eina_Bool value)
+{
+   Eina_Bool old = efl_io_reader_eos_get(o);
+   if (old == value) return;
+
+   efl_io_reader_eos_set(efl_super(o, MY_CLASS), value);
+
+   if (!value) return;
+
+   /* stop monitoring the FD, it's closed */
+   efl_event_callback_del(o, EFL_LOOP_FD_EVENT_READ, 
_efl_net_socket_fd_event_read, NULL);
+   efl_event_callback_del(o, EFL_LOOP_FD_EVENT_WRITE, 
_efl_net_socket_fd_event_write, NULL);
+}
+
 EOLIAN static Eina_Error
 _efl_net_socket_fd_efl_io_writer_write(Eo *o, Efl_Net_Socket_Fd_Data *pd 
EINA_UNUSED, Eina_Slice *ro_slice, Eina_Slice *remaining)
 {
diff --git a/src/lib/ecore_con/efl_net_socket_fd.eo 
b/src/lib/ecore_con/efl_net_socket_fd.eo
index b5973f9..8250800 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.eo
+++ b/src/lib/ecore_con/efl_net_socket_fd.eo
@@ -38,6 +38,7 @@ class Efl.Net.Socket.Fd (Efl.Loop.Fd, Efl.Io.Reader.Fd, 
Efl.Io.Writer.Fd, Efl.Io
         Efl.Io.Closer.closed.get;
         Efl.Io.Reader.read;
         Efl.Io.Reader.can_read.set;
+        Efl.Io.Reader.eos.set;
         Efl.Io.Writer.write;
         Efl.Io.Writer.can_write.set;
         Efl.Net.Socket.address_local;

-- 


Reply via email to