iochannel.h
来自「GNet是一个简单的网络库。它是目标定向的」· C头文件 代码 · 共 197 行
H
197 行
/* GNet - Networking library * Copyright (C) 2000 David Helder * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */#ifndef _GNET_IOCHANNEL_H#define _GNET_IOCHANNEL_H#include <glib.h>#ifdef __cplusplusextern "C" {#endif /* __cplusplus */GIOError gnet_io_channel_writen (GIOChannel *channel, gpointer buf, guint len, guint *bytes_written);GIOError gnet_io_channel_readn (GIOChannel *channel, gpointer buf, guint len, guint *bytes_read);GIOError gnet_io_channel_readline (GIOChannel *channel, gchar *buf, guint len, guint *bytes_read);GIOError gnet_io_channel_readline_strdup (GIOChannel *channel, gchar **buf_ptr, guint *bytes_read);/* **************************************** *//* This part of the module is experimental, buggy, and unstable. Use at your own risk. To use this part, define GNET_EXPERIMENTAL before including gnet.h. Note that types are prefixed by "GNet" and not just "G". This is to avoid potential future namespace collision with GLib.*/#ifdef GNET_EXPERIMENTAL /** * GNetIOChannelWriteAsyncID: * * ID of an asynchronous write started with * gnet_io_channel_write_async(). The connection can be canceled by * calling gnet_io_channel_write_async_cancel() with the ID. * **/typedef gpointer GNetIOChannelWriteAsyncID;/** * GNetIOChannelWriteAsyncStatus: * * Status for an asynchronous write via * gnet_io_channel_write_async(), passed by * GNetIOChannelWriteAsyncFunc. * **/typedef enum { GNET_IOCHANNEL_WRITE_ASYNC_STATUS_OK, GNET_IOCHANNEL_WRITE_ASYNC_STATUS_TIMEOUT, GNET_IOCHANNEL_WRITE_ASYNC_STATUS_ERROR} GNetIOChannelWriteAsyncStatus;/** * GNetIOChannelWriteAsyncFunction: * @iochannel: channel written to TOREMOVE * @buffer: Buffer (callee owned) TOREMOVE * @length: Length of buffer TOREMOVE * @bytes_writen: Total bytes writen to channel * @status: Write status * @user_data: User data * * Callback for gnet_io_channel_write_async(). Called when something * is read or if a timeout or error occurs. FIX: Remove iochannel, * buffer, and length arguments. * **/typedef void (*GNetIOChannelWriteAsyncFunc)(GIOChannel* iochannel, gchar* buffer, guint length, guint bytes_writen, GNetIOChannelWriteAsyncStatus status, gpointer user_data);GNetIOChannelWriteAsyncIDgnet_io_channel_write_async (GIOChannel* iochannel, gchar* buffer, guint length, guint timeout, GNetIOChannelWriteAsyncFunc func, gpointer user_data);void gnet_io_channel_write_async_cancel (GNetIOChannelWriteAsyncID id, gboolean delete_buffer);/* **************************************** */typedef enum { GNET_IOCHANNEL_READ_ASYNC_STATUS_OK, GNET_IOCHANNEL_READ_ASYNC_STATUS_TIMEOUT, GNET_IOCHANNEL_READ_ASYNC_STATUS_ERROR} GNetIOChannelReadAsyncStatus;typedef gpointer GNetIOChannelReadAsyncID;typedef gboolean (*GNetIOChannelReadAsyncFunc)(GIOChannel* iochannel, GNetIOChannelReadAsyncStatus status, gchar* buffer, guint length, gpointer user_data);/* ID is invalid if there is an error. If OK and buffer and length is 0, then it's an EOF. */typedef gint (*GNetIOChannelReadAsyncCheckFunc)(gchar* buffer, guint length, gpointer user_data);/* Return -1 if error, otherwise number of bytes read. *//* Set buffer to NULL if you want the buffer created dynamicly. Length will be the maximum length of the buffer. GNet owns the buffer if you do this. If read_one_byte_at_a_time is TRUE, it will read one byte at a time and call the check function. This is really used for the readline function when you read a line, return FALSE, and then call readany. The problem is that readline may have stuff still in its buffer that now gets lost. This would be bad. If you call read_async once and always return TRUE, then don't set read_one_byte_at_a_time. \0 is appended if there is room.*/GNetIOChannelReadAsyncID gnet_io_channel_read_async (GIOChannel* iochannel, gchar* buffer, guint length, guint timeout, gboolean read_one_byte_at_a_time, GNetIOChannelReadAsyncCheckFunc check_func, gpointer check_user_data, GNetIOChannelReadAsyncFunc func, gpointer user_data);void gnet_io_channel_read_async_cancel (GNetIOChannelReadAsyncID id);gint gnet_io_channel_readany_check_func (gchar* buffer, guint length, gpointer data);gint gnet_io_channel_readline_check_func (gchar* buffer, guint length, gpointer data);#define gnet_io_channel_readany_async(IO, BUF, LEN, TO, FUNC, UD) \ gnet_io_channel_read_async (IO, BUF, LEN, TO, FALSE, \ gnet_io_channel_readany_check_func, NULL, FUNC, UD)#define gnet_io_channel_readline_async(IO, BUF, LEN, TO, FUNC, UD) \ gnet_io_channel_read_async (IO, BUF, LEN, TO, TRUE, \ gnet_io_channel_readline_check_func, NULL, FUNC, UD)#endif /* GNET_EXPERIMENTAL */#ifdef __cplusplus}#endif /* __cplusplus */#endif /* _GNET_IOCHANNEL_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?