Enlightenment CVS committal

Author  : sebastid
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore_con


Modified Files:
        Ecore_Con.h Makefile.am ecore_con.c ecore_con_private.h 
Added Files:
        ecore_con_dns.c 


Log Message:
non-blocking gethostbyname

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_con/Ecore_Con.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- Ecore_Con.h 24 Jun 2005 13:38:27 -0000      1.9
+++ Ecore_Con.h 16 Aug 2005 09:25:02 -0000      1.10
@@ -18,6 +18,8 @@
 # endif
 #endif
 
+#include <netdb.h>
+
 /**
  * @file Ecore_Con.h
  * @brief Sockets functions.
@@ -161,6 +163,11 @@
    EAPI int               ecore_con_url_url_set(Ecore_Con_Url *url_con, const 
char *url);
    EAPI int               ecore_con_url_send(Ecore_Con_Url *url_con, void 
*data, size_t length, char *content_type);
 
+   EAPI int               ecore_con_dns_gethostbyname(const char *name,
+                                                     void (*done_cb)(struct 
hostent *hostent, void *data),
+                                                     void *data);
+
+
 #ifdef __cplusplus
 }
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_con/Makefile.am,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- Makefile.am 24 Jun 2005 13:38:27 -0000      1.10
+++ Makefile.am 16 Aug 2005 09:25:02 -0000      1.11
@@ -18,6 +18,7 @@
 
 libecore_con_la_SOURCES = \
 ecore_con.c \
+ecore_con_dns.c \
 ecore_con_url.c \
 ecore_con_private.h
 
@@ -32,5 +33,6 @@
 
 EXTRA_DIST = \
 ecore_con.c \
+ecore_con_dns.c \
 ecore_con_url.c \
 ecore_con_private.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_con/ecore_con.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -3 -r1.43 -r1.44
--- ecore_con.c 15 Aug 2005 23:36:22 -0000      1.43
+++ ecore_con.c 16 Aug 2005 09:25:02 -0000      1.44
@@ -29,6 +29,7 @@
 #include <time.h>
 #endif
 
+static void _ecore_con_cb_gethostbyname(struct hostent *he, void *data);
 static void _ecore_con_server_free(Ecore_Con_Server *svr);
 static void _ecore_con_client_free(Ecore_Con_Client *cl);
 static int _ecore_con_svr_handler(void *data, Ecore_Fd_Handler *fd_handler);
@@ -80,7 +81,10 @@
 #if USE_OPENSSL
        SSL_library_init();
        SSL_load_error_strings();
-#endif 
+#endif
+
+       /* TODO Remember return value, if it fails, use gethostbyname() */
+       ecore_con_dns_init();
      }
    if (!servers)
       servers = ecore_list_new();
@@ -104,6 +108,8 @@
             _ecore_con_server_free(ecore_list_remove_first(servers));
        ecore_list_destroy(servers);
        servers = NULL;
+
+       ecore_con_dns_shutdown();
      }
    return 0;
 }
@@ -371,7 +377,6 @@
    Ecore_Con_Server   *svr;
    Ecore_Con_Type      type;
    struct sockaddr_un  socket_unix;
-   struct sockaddr_in  socket_addr;
    int                 curstate = 0;
    char                buf[4096];
 
@@ -437,36 +442,7 @@
      }
    else if (type == ECORE_CON_REMOTE_SYSTEM)
      {
-       struct hostent *he;
-       
-       /* FIXME: gethostbyname is blocking... */
-       if (!(he = gethostbyname(name))) goto error;
-       svr->fd = socket(AF_INET, SOCK_STREAM, 0);
-       if (svr->fd < 0) goto error;
-       if (fcntl(svr->fd, F_SETFL, O_NONBLOCK) < 0) goto error;
-       if (fcntl(svr->fd, F_SETFD, FD_CLOEXEC) < 0) goto error;
-       if (setsockopt(svr->fd, SOL_SOCKET, SO_REUSEADDR, &curstate, 
sizeof(curstate)) < 0) goto error;
-       socket_addr.sin_family = AF_INET;
-       socket_addr.sin_port = htons(port);
-       memcpy((struct in_addr *)&socket_addr.sin_addr, 
-              he->h_addr, sizeof(struct in_addr));
-       if (connect(svr->fd, (struct sockaddr *)&socket_addr, sizeof(struct 
sockaddr_in)) < 0) 
-         {
-            if (errno != EINPROGRESS)
-              goto error;
-            svr->connecting = 1;
-            svr->fd_handler = ecore_main_fd_handler_add(svr->fd,
-                                                        ECORE_FD_READ | 
ECORE_FD_WRITE,
-                                                        _ecore_con_cl_handler, 
svr,
-                                                        NULL, NULL);
-         }
-       else
-         svr->fd_handler = ecore_main_fd_handler_add(svr->fd,
-                                                     ECORE_FD_READ,
-                                                     _ecore_con_cl_handler, 
svr,
-                                                     NULL, NULL);
-
-       if (!svr->fd_handler) goto error;
+       ecore_con_dns_gethostbyname(name, _ecore_con_cb_gethostbyname, svr);
      }
 
 #if USE_OPENSSL
@@ -922,10 +898,52 @@
    svr->fd_handler = NULL;
 }
 
+static void
+_ecore_con_cb_gethostbyname(struct hostent *he, void *data)
+{
+   Ecore_Con_Server   *svr;
+   struct sockaddr_in  socket_addr;
+   int                 curstate = 0;
+
+   svr = data;
+
+   svr->fd = socket(AF_INET, SOCK_STREAM, 0);
+   if (svr->fd < 0) goto error;
+   if (fcntl(svr->fd, F_SETFL, O_NONBLOCK) < 0) goto error;
+   if (fcntl(svr->fd, F_SETFD, FD_CLOEXEC) < 0) goto error;
+   if (setsockopt(svr->fd, SOL_SOCKET, SO_REUSEADDR, &curstate, 
sizeof(curstate)) < 0) goto error;
+   socket_addr.sin_family = AF_INET;
+   socket_addr.sin_port = htons(svr->port);
+   memcpy((struct in_addr *)&socket_addr.sin_addr, 
+        he->h_addr, sizeof(struct in_addr));
+   if (connect(svr->fd, (struct sockaddr *)&socket_addr, sizeof(struct 
sockaddr_in)) < 0) 
+     {
+       if (errno != EINPROGRESS)
+         goto error;
+       svr->connecting = 1;
+       svr->fd_handler = ecore_main_fd_handler_add(svr->fd,
+             ECORE_FD_READ | ECORE_FD_WRITE,
+             _ecore_con_cl_handler, svr,
+             NULL, NULL);
+     }
+   else
+     svr->fd_handler = ecore_main_fd_handler_add(svr->fd,
+          ECORE_FD_READ,
+          _ecore_con_cl_handler, svr,
+          NULL, NULL);
+
+   if (!svr->fd_handler) goto error;
+   return;
+
+   error:
+   kill_server(svr);
+}
+
 static int
 svr_try_connect_plain(Ecore_Con_Server *svr)
 {
-   int so_err = 0, size = sizeof(int);
+   int so_err = 0;
+   unsigned int size = sizeof(int);
 
    if (getsockopt(svr->fd, SOL_SOCKET, SO_ERROR, &so_err, &size) < 0)
      so_err = -1;
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_con/ecore_con_private.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- ecore_con_private.h 24 Jun 2005 13:38:27 -0000      1.8
+++ ecore_con_private.h 16 Aug 2005 09:25:02 -0000      1.9
@@ -83,4 +83,8 @@
    char              active : 1;
 };
 #endif
+
+/* from ecore_con_dns.c */
+int ecore_con_dns_init(void);
+void ecore_con_dns_shutdown(void);
 #endif




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to