efl_net_socket_fd: do not close stdout if nothing was set.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Thu, 8 Dec 2016 20:54:43 +0000 (18:54 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Fri, 9 Dec 2016 15:47:03 +0000 (13:47 -0200)
if we create an object, say a TCP dialer, and don't connect/bind, then
we have no FD (=0). If we set FD to INVALID_SOCKET on start, other
parts of the code will fail since they consider that "closed", but
we're not closed yet.

Then check for family == AF_UNSPEC && fd == 0, if so don't close it.

src/lib/ecore_con/efl_net_socket_fd.c

index 4bed00d..ec0134f 100644 (file)
@@ -164,7 +164,8 @@ _efl_net_socket_fd_efl_io_closer_close(Eo *o, Efl_Net_Socket_Fd_Data *pd EINA_UN
    efl_loop_fd_set(efl_super(o, MY_CLASS), SOCKET_TO_LOOP_FD(INVALID_SOCKET));
 
    efl_io_closer_fd_set(o, SOCKET_TO_LOOP_FD(INVALID_SOCKET));
-   if (closesocket(fd) != 0) ret = efl_net_socket_error_get();
+   if (!((pd->family == AF_UNSPEC) && (fd == 0))) /* if nothing is set, fds are all zero, avoid closing STDOUT */
+     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 */