[glib] GSocket: Add function to get the currently available bytes for reading
- From: Sebastian DrÃge <sdroege src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GSocket: Add function to get the currently available bytes for reading
- Date: Mon, 16 Jan 2012 17:42:41 +0000 (UTC)
commit fbdb8128dce3ef013640c7142888a76f56a7f0f8
Author: Ole Andrà Vadla RavnÃs <oravnas cisco com>
Date: Mon Jan 16 14:00:49 2012 +0100
GSocket: Add function to get the currently available bytes for reading
https://bugzilla.gnome.org/show_bug.cgi?id=668009
docs/reference/gio/gio-sections.txt | 1 +
gio/gio.symbols | 1 +
gio/gsocket.c | 34 ++++++++++++++++++++++++++++++++++
gio/gsocket.h | 2 ++
4 files changed, 38 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gio/gio-sections.txt b/docs/reference/gio/gio-sections.txt
index 3da75ef..96b8b32 100644
--- a/docs/reference/gio/gio-sections.txt
+++ b/docs/reference/gio/gio-sections.txt
@@ -1806,6 +1806,7 @@ g_socket_is_connected
g_socket_create_source
g_socket_condition_check
g_socket_condition_wait
+g_socket_get_available_bytes
g_socket_set_listen_backlog
g_socket_get_listen_backlog
g_socket_get_blocking
diff --git a/gio/gio.symbols b/gio/gio.symbols
index d1e3ff8..94391d5 100644
--- a/gio/gio.symbols
+++ b/gio/gio.symbols
@@ -949,6 +949,7 @@ g_socket_condition_check
g_socket_condition_wait
g_socket_connect
g_socket_create_source
+g_socket_get_available_bytes
g_socket_get_blocking
g_socket_get_broadcast
g_socket_get_family
diff --git a/gio/gsocket.c b/gio/gsocket.c
index 196c842..d985e9e 100644
--- a/gio/gsocket.c
+++ b/gio/gsocket.c
@@ -41,6 +41,7 @@
#ifndef G_OS_WIN32
# include <fcntl.h>
# include <unistd.h>
+# include <sys/ioctl.h>
#endif
#ifdef HAVE_SYS_UIO_H
@@ -2336,6 +2337,39 @@ g_socket_check_connect_result (GSocket *socket,
}
/**
+ * g_socket_get_available_bytes:
+ * @socket: a #GSocket
+ *
+ * Get the amount of data pending in the OS input buffer.
+ *
+ * Returns: the number of bytes that can be read from the socket
+ * without blocking or -1 on error.
+ *
+ * Since: 2.32
+ */
+gssize
+g_socket_get_available_bytes (GSocket *socket)
+{
+#ifndef G_OS_WIN32
+ gulong avail = 0;
+#else
+ gint avail = 0;
+#endif
+
+ g_return_val_if_fail (G_IS_SOCKET (socket), -1);
+
+#ifndef G_OS_WIN32
+ if (ioctl (socket->priv->fd, FIONREAD, &avail) < 0)
+ return -1;
+#else
+ if (ioctlsocket (socket->priv->fd, FIONREAD, &avail) == SOCKET_ERROR)
+ return -1;
+#endif
+
+ return avail;
+}
+
+/**
* g_socket_receive:
* @socket: a #GSocket
* @buffer: a buffer to read data into (which should be at least @size
diff --git a/gio/gsocket.h b/gio/gsocket.h
index 94b4ce1..ae7673c 100644
--- a/gio/gsocket.h
+++ b/gio/gsocket.h
@@ -137,6 +137,8 @@ gboolean g_socket_connect (GSocket
gboolean g_socket_check_connect_result (GSocket *socket,
GError **error);
+gssize g_socket_get_available_bytes (GSocket *socket);
+
GIOCondition g_socket_condition_check (GSocket *socket,
GIOCondition condition);
gboolean g_socket_condition_wait (GSocket *socket,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]