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; --
