#include <config.h>
#include <glib.h>
#include <gio/gio.h>
-#include <gnio/gnio.h>
#include "gasynchelper.h"
#include "gnioenumtypes.h"
g_warning ("Error setting socket status flags: %s", g_strerror (errno));
socket->priv->blocking = blocking;
+
+ g_object_notify (G_OBJECT (socket), "blocking");
}
gboolean
g_warning ("error setting reuse address: %s", g_strerror (errno));
socket->priv->reuse_address = reuse;
+
+ g_object_notify (G_OBJECT (socket), "reuse-address");
}
gboolean
return socket->priv->reuse_address;
}
+gboolean
+g_socket_has_socket_error (GSocket *socket,
+ GError **error)
+{
+ gint sockerr;
+ guint32 sockerr_size = sizeof (sockerr);
+
+ g_return_val_if_fail (G_IS_SOCKET (socket), FALSE);
+
+ if (getsockopt (socket->priv->fd, SOL_SOCKET, SO_ERROR, (gpointer) &sockerr, &sockerr_size) < 0)
+ {
+ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "could not get socket error: %s", g_strerror (errno));
+ return TRUE;
+ }
+
+ if (sockerr != 0)
+ {
+ g_set_error (error, G_IO_ERROR, g_io_error_from_errno (sockerr), "error connecting: %s", g_strerror (sockerr));
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
GSocketAddress *
g_socket_get_local_address (GSocket *socket,
GError **error)
{
gchar buffer[256];
- gsize len = 256;
+ guint32 len = 256;
g_return_val_if_fail (G_IS_SOCKET (socket), NULL);
GError **error)
{
gchar buffer[256];
- gsize len = 256;
+ guint32 len = 256;
g_return_val_if_fail (G_IS_SOCKET (socket), NULL);
gssize
g_socket_send (GSocket *socket,
- gchar *buffer,
+ const gchar *buffer,
gsize size,
GError **error)
{
{
g_return_val_if_fail (G_IS_SOCKET (socket) && (cancellable == NULL || G_IS_CANCELLABLE (cancellable)), NULL);
- return _g_fd_source_new (socket->priv->fd, G_IO_IN | G_IO_HUP | G_IO_ERR, cancellable);
+ return _g_fd_source_new (socket->priv->fd, condition, cancellable);
}