efl_net_dialer_tcp: make code bit more robust.
authorGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Wed, 26 Oct 2016 19:51:58 +0000 (17:51 -0200)
committerGustavo Sverzut Barbieri <barbieri@profusion.mobi>
Wed, 26 Oct 2016 21:01:03 +0000 (19:01 -0200)
Also avoids the double-set of remote address, since socket.tcp will
alredy do that for us when we efl_loop_fd_set().

src/lib/ecore_con/efl_net_dialer_tcp.c

index e6224c9..0b04978 100644 (file)
@@ -96,27 +96,33 @@ _efl_net_dialer_tcp_connected(void *data, const struct sockaddr *addr, socklen_t
 {
    Eo *o = data;
    Efl_Net_Dialer_Tcp_Data *pd = efl_data_scope_get(o, MY_CLASS);
-   char buf[INET6_ADDRSTRLEN + sizeof("[]:65536")];
 
    pd->connect.thread = NULL;
 
    efl_ref(o); /* we're emitting callbacks then continuing the workflow */
 
-   if (err)
+   if (err) goto error;
+
+   efl_net_socket_fd_family_set(o, addr->sa_family);
+   efl_loop_fd_set(o, sockfd);
+   if (efl_net_socket_address_remote_get(o))
      {
-        efl_io_reader_eos_set(o, EINA_TRUE);
-        efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
+        efl_event_callback_call(o, EFL_NET_DIALER_EVENT_RESOLVED, NULL);
+        efl_net_dialer_connected_set(o, EINA_TRUE);
      }
    else
      {
-        efl_net_socket_fd_family_set(o, addr->sa_family);
-        efl_loop_fd_set(o, sockfd);
-        if (efl_net_ip_port_fmt(buf, sizeof(buf), addr))
-          {
-             efl_net_socket_address_remote_set(o, buf);
-             efl_event_callback_call(o, EFL_NET_DIALER_EVENT_RESOLVED, NULL);
-          }
-        efl_net_dialer_connected_set(o, EINA_TRUE);
+        err = EFL_NET_DIALER_ERROR_COULDNT_CONNECT;
+        efl_loop_fd_set(o, INVALID_SOCKET);
+        closesocket(sockfd);
+        goto error;
+     }
+
+ error:
+   if (err)
+     {
+        efl_io_reader_eos_set(o, EINA_TRUE);
+        efl_event_callback_call(o, EFL_NET_DIALER_EVENT_ERROR, &err);
      }
 
    efl_unref(o);