![]() |
![]() |
![]() |
GNet Network Library Reference Manual | ![]() |
---|---|---|---|---|
#include <gnet.h> GIOError gnet_io_channel_writen (GIOChannel *channel, gpointer buffer, gsize length, gsize *bytes_writtenp); GIOError gnet_io_channel_readn (GIOChannel *channel, gpointer buffer, gsize length, gsize *bytes_readp); GIOError gnet_io_channel_readline (GIOChannel *channel, gchar *buffer, gsize length, gsize *bytes_readp); GIOError gnet_io_channel_readline_strdup (GIOChannel *channel, gchar **bufferp, gsize *bytes_readp);
The IOChannel module provides utility functions for reading from and writing to GIOChannels.
GIOError gnet_io_channel_writen (GIOChannel *channel, gpointer buffer, gsize length, gsize *bytes_writtenp);
Writes all length
bytes in buffer
to channel
. If
bytes_writtenp
is set, the number of bytes written is stored in
the integer it points to. bytes_writtenp
will be less than
length
if the connection closed or an error occured.
This function is essentially a wrapper around g_io_channel_write()
.
The problem with g_io_channel_write()
is that it may not write all
the bytes and will return a short count even when there was not an
error. This is rare, but possible, and often difficult to detect
when it does happen.
channel : |
channel to write to |
buffer : |
buffer to read from |
length : |
length of buffer
|
bytes_writtenp : |
pointer to integer in which to store the number of bytes written |
Returns : | G_IO_ERROR_NONE if successful; something else otherwise.
The number of bytes written is stored in the integer pointed to by
bytes_writtenp .
|
GIOError gnet_io_channel_readn (GIOChannel *channel, gpointer buffer, gsize length, gsize *bytes_readp);
Read exactly length
bytes from channel
into buffer
. If
bytes_readp
is set, the number of bytes read is stored in the
integer it points to. bytes_readp
will be less than length
if the
end-of-file was reached or an error occured.
This function is essentially a wrapper around g_io_channel_read()
.
The problem with g_io_channel_read()
is that it may not read all
the bytes requested and will return a short count even when there
was not an error (this is rare, but it can happen and is often
difficult to detect when it does).
channel : |
channel to read from |
buffer : |
buffer to write to |
length : |
length of the buffer |
bytes_readp : |
pointer to integer for the function to store the number of of bytes read |
Returns : | G_IO_ERROR_NONE if everything is ok; something else
otherwise. Also, returns the number of bytes read by modifying the
integer pointed to by bytes_readp .
|
GIOError gnet_io_channel_readline (GIOChannel *channel, gchar *buffer, gsize length, gsize *bytes_readp);
Read a line from the channel. The line will be NULL-terminated and include the newline character. If there is not enough room for the line, the line is truncated to fit in the buffer.
Warnings:
1. If the buffer is full and the last character is not a newline, the line was truncated. Do not assume the buffer ends with a newline.
2. bytes_readp
is the number of bytes put in the buffer. It
includes the terminating NULL character.
3. NULL characters can appear in the line before the terminating NULL (e.g., "Hello world\0\n"). If this matters, check the string length of the buffer against the bytes read.
I hope this isn't too confusing. Usually the function works as you expect it to if you have a big enough buffer. If you have the Stevens book, you should be familiar with the semantics.
channel : |
channel to read from |
buffer : |
buffer to write to |
length : |
length of the buffer |
bytes_readp : |
pointer to integer in which to store the number of of bytes read |
Returns : | G_IO_ERROR_NONE if everything is ok; something else
otherwise. The number of bytes read is stored in the integer
pointed to by bytes_readp (this number includes the newline). If
an error is returned, the contents of buffer and bytes_readp are
undefined.
|
GIOError gnet_io_channel_readline_strdup (GIOChannel *channel, gchar **bufferp, gsize *bytes_readp);
Read a line from the channel. The line will be null-terminated and include the newline character. Similarly to g_strdup_printf, a buffer large enough to hold the string will be allocated.
Warnings:
1. If the last character of the buffer is not a newline, the line was truncated by EOF. Do not assume the buffer ends with a newline.
2. bytes_readp
is actually the number of bytes put in the buffer.
It includes the terminating NULL character.
3. NULL characters can appear in the line before the terminating null (e.g., "Hello world\0\n"). If this matters, check the string length of the buffer against the bytes read.
channel : |
channel to read from |
bufferp : |
pointer to gchar* in which to store the new buffer |
bytes_readp : |
pointer to integer in which to store the number of of bytes read |
Returns : | G_IO_ERROR_NONE if everything is ok; something else
otherwise. The number of bytes read is stored in the integer
pointed to by bytes_readp (this number includes the newline). The
data pointer is stored in the pointer pointed to by bufferp . This
data is caller-owned. If an error is returned, the contents of
bufferp and bytes_readp are undefined.
|