X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fgnio.git;a=blobdiff_plain;f=gnio%2Fgsocket.c;h=c89d10bb19eb090f1206cd5405618c712f597437;hp=3b9671e514e746b9b2c7e5f42c849a23574cc3c6;hb=932359e12259081300067d273febe261eee0c870;hpb=5183a9b80c8a22531948af76f4433f0a1a510cbc diff --git a/gnio/gsocket.c b/gnio/gsocket.c index 3b9671e..c89d10b 100644 --- a/gnio/gsocket.c +++ b/gnio/gsocket.c @@ -24,9 +24,7 @@ #include #include #include -#include #include "gasynchelper.h" -#include "gnioenumtypes.h" #include #ifndef G_OS_WIN32 @@ -420,6 +418,8 @@ g_socket_set_blocking (GSocket *socket, g_warning ("Error setting socket status flags: %s", g_strerror (errno)); socket->priv->blocking = blocking; + + g_object_notify (G_OBJECT (socket), "blocking"); } gboolean @@ -442,6 +442,8 @@ g_socket_set_reuse_address (GSocket *socket, g_warning ("error setting reuse address: %s", g_strerror (errno)); socket->priv->reuse_address = reuse; + + g_object_notify (G_OBJECT (socket), "reuse-address"); } gboolean @@ -452,12 +454,36 @@ g_socket_get_reuse_address (GSocket *socket) 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); @@ -478,7 +504,7 @@ g_socket_get_remote_address (GSocket *socket, GError **error) { gchar buffer[256]; - gsize len = 256; + guint32 len = 256; g_return_val_if_fail (G_IS_SOCKET (socket), NULL); @@ -623,7 +649,7 @@ g_socket_receive (GSocket *socket, gssize g_socket_send (GSocket *socket, - gchar *buffer, + const gchar *buffer, gsize size, GError **error) { @@ -659,5 +685,5 @@ g_socket_create_source (GSocket *socket, { 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); }