barbieri pushed a commit to branch master.

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

commit 810294d099d3716015e9e7b886c8e7cd28c0ff70
Author: Gustavo Sverzut Barbieri <[email protected]>
Date:   Sat Oct 22 22:13:40 2016 -0200

    efl_net_socket_fd: use closesocket() and INVALID_SOCKET.
    
    Instead of efl_io_closer_fd that does close() and compares with < 0,
    use windows-friendly code.
---
 src/lib/ecore_con/efl_net_socket_fd.c  | 21 +++++++++++++++------
 src/lib/ecore_con/efl_net_socket_fd.eo |  1 +
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/lib/ecore_con/efl_net_socket_fd.c 
b/src/lib/ecore_con/efl_net_socket_fd.c
index 440a46b..7108cd1 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.c
+++ b/src/lib/ecore_con/efl_net_socket_fd.c
@@ -113,9 +113,9 @@ _efl_net_socket_fd_set(Eo *o, Efl_Net_Socket_Fd_Data *pd, 
SOCKET fd)
 static void
 _efl_net_socket_fd_unset(Eo *o)
 {
-   efl_io_reader_fd_reader_fd_set(o, -1);
-   efl_io_writer_fd_writer_fd_set(o, -1);
-   efl_io_closer_fd_closer_fd_set(o, -1);
+   efl_io_reader_fd_reader_fd_set(o, INVALID_SOCKET);
+   efl_io_writer_fd_writer_fd_set(o, INVALID_SOCKET);
+   efl_io_closer_fd_closer_fd_set(o, INVALID_SOCKET);
 
    efl_net_socket_address_local_set(o, NULL);
    efl_net_socket_address_remote_set(o, NULL);
@@ -143,7 +143,8 @@ _efl_net_socket_fd_efl_loop_fd_fd_set(Eo *o, 
Efl_Net_Socket_Fd_Data *pd, int fd)
 EOLIAN static Eina_Error
 _efl_net_socket_fd_efl_io_closer_close(Eo *o, Efl_Net_Socket_Fd_Data *pd 
EINA_UNUSED)
 {
-   Eina_Error ret;
+   SOCKET fd = efl_io_closer_fd_closer_fd_get(o);
+   Eina_Error ret = 0;
 
    EINA_SAFETY_ON_TRUE_RETURN_VAL(efl_io_closer_closed_get(o), EBADF);
 
@@ -155,9 +156,11 @@ _efl_net_socket_fd_efl_io_closer_close(Eo *o, 
Efl_Net_Socket_Fd_Data *pd EINA_UN
     * retain efl_io_closer_fd_closer_fd_get() so close(super()) works
     * and we emit the events with proper addresses.
     */
-   efl_loop_fd_set(efl_super(o, MY_CLASS), -1);
+   efl_loop_fd_set(efl_super(o, MY_CLASS), INVALID_SOCKET);
 
-   ret = efl_io_closer_close(efl_super(o, MY_CLASS));
+   efl_io_closer_fd_closer_fd_set(o, INVALID_SOCKET);
+   if (closesocket(fd) != 0) ret = efl_net_socket_error_get();
+   efl_event_callback_call(o, EFL_IO_CLOSER_EVENT_CLOSED, NULL);
 
    /* do the cleanup our _efl_net_socket_fd_efl_loop_fd_fd_set() would do */
    _efl_net_socket_fd_unset(o);
@@ -165,6 +168,12 @@ _efl_net_socket_fd_efl_io_closer_close(Eo *o, 
Efl_Net_Socket_Fd_Data *pd EINA_UN
    return ret;
 }
 
+EOLIAN static Eina_Bool
+_efl_net_socket_fd_efl_io_closer_closed_get(Eo *o, Efl_Net_Socket_Fd_Data *pd 
EINA_UNUSED)
+{
+   return efl_io_closer_fd_closer_fd_get(o) == INVALID_SOCKET;
+}
+
 EOLIAN static Eina_Error
 _efl_net_socket_fd_efl_io_reader_read(Eo *o, Efl_Net_Socket_Fd_Data *pd 
EINA_UNUSED, Eina_Rw_Slice *rw_slice)
 {
diff --git a/src/lib/ecore_con/efl_net_socket_fd.eo 
b/src/lib/ecore_con/efl_net_socket_fd.eo
index 167edbd..711d387 100644
--- a/src/lib/ecore_con/efl_net_socket_fd.eo
+++ b/src/lib/ecore_con/efl_net_socket_fd.eo
@@ -35,6 +35,7 @@ class Efl.Net.Socket.Fd (Efl.Loop.Fd, Efl.Io.Reader.Fd, 
Efl.Io.Writer.Fd, Efl.Io
         Efl.Object.destructor;
         Efl.Loop.Fd.fd.set;
         Efl.Io.Closer.close;
+        Efl.Io.Closer.closed.get;
         Efl.Io.Reader.read;
         Efl.Io.Writer.write;
         Efl.Net.Socket.address_local;

-- 


Reply via email to