efl_net_socket_fd: do not close stdout if nothing was set.

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.
This commit is contained in:
Gustavo Sverzut Barbieri 2016-12-08 18:54:43 -02:00
parent cfc21c16fb
commit 3fc0fbba42
1 changed files with 2 additions and 1 deletions

View 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 */