Merge branch 'master' into errorstate
authorSamuel Cormier-Iijima <sciyoshi@gmail.com>
Sun, 2 Mar 2008 01:21:49 +0000 (20:21 -0500)
committerSamuel Cormier-Iijima <sciyoshi@gmail.com>
Sun, 2 Mar 2008 01:21:49 +0000 (20:21 -0500)
Conflicts:

gnio/gnio.h

1  2 
gnio/Makefile.am
gnio/gnio.h
gnio/gsocket.h
gnio/gtcpclient.c

Simple merge
diff --cc gnio/gnio.h
  #include <gnio/ginetaddress.h>
  #include <gnio/ginet4address.h>
  #include <gnio/ginet6address.h>
 -#include <gnio/ginetsocketaddress.h>
  #include <gnio/gsocketaddress.h>
 +#include <gnio/ginetsocketaddress.h>
  #include <gnio/gresolver.h>
  #include <gnio/gsocket.h>
+ #include <gnio/gnioerror.h>
  #include <gnio/gtcpclient.h>
  #include <gnio/gtcpserver.h>
 +#include <gnio/gnioenumtypes.h>
  
  #undef __GNIO_GNIO_H_INSIDE__
  
diff --cc gnio/gsocket.h
Simple merge
@@@ -130,10 -202,55 +202,55 @@@ g_tcp_client_new_from_address (GInetSoc
  }
  
  gboolean
- g_tcp_client_connect (GTcpClient *client,
-                       GError **error)
+ g_tcp_client_connect (GTcpClient    *client,
+                       GCancellable  *cancellable,
+                       GError       **error)
  {
-   return FALSE;
+   GInetAddress *address;
+   g_return_val_if_fail (G_IS_TCP_CLIENT (client), FALSE);
+   if (!client->priv->address)
+     {
+       // we've been constructed with just hostname+port, resolve
+       GResolver *resolver = g_resolver_new ();
+       address = g_resolver_resolve (resolver, client->priv->hostname, cancellable, error);
+       if (!address)
+         return FALSE;
+       client->priv->address = g_inet_socket_address_new (address, client->priv->port);
+       g_object_unref (resolver);
+       g_object_ref_sink (client->priv->address);
+     }
+   else
+     {
+      address = g_inet_socket_address_get_address (client->priv->address);
+     }
+   if (G_IS_INET4_ADDRESS (address))
 -    client->priv->socket = g_socket_new (G_SOCKET_DOMAIN_INET, G_SOCKET_TYPE_STREAM, NULL, error);
++    client->priv->socket = g_socket_new (G_SOCKET_DOMAIN_INET, G_SOCKET_TYPE_STREAM, NULL);
+   else if (G_IS_INET6_ADDRESS (address))
 -    client->priv->socket = g_socket_new (G_SOCKET_DOMAIN_INET6, G_SOCKET_TYPE_STREAM, NULL, error);
++    client->priv->socket = g_socket_new (G_SOCKET_DOMAIN_INET6, G_SOCKET_TYPE_STREAM, NULL);
+   else
+     {
+       g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "unsupported address domain");
+       return FALSE;
+     }
 -  if (!client->priv->socket)
++  if (g_socket_has_error (client->priv->socket, error))
+     return FALSE;
+   if (g_cancellable_set_error_if_cancelled (cancellable, error))
+     return FALSE;
+   if (!g_socket_connect (client->priv->socket, G_SOCKET_ADDRESS (client->priv->address), error))
+     return FALSE;
+   return TRUE;
  }
  
  typedef struct {