请教libevent 回调函数的神奇函数bufferevent

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
安安乐乐才是福,平平淡淡才是真
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(4314)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_080071',
blogTitle:'libevent在异步socket中的使用[转]',
blogAbstract:'学习libevent的使用的时候,在
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}libevent笔记 - 简书
libevent笔记
bufferevent.h
传递到事件回调函数的事件
#define BEV_EVENT_READING
/**& 读取过程中遇到的错误 */
#define BEV_EVENT_WRITING
/**& 写数据过程中遇到错误 */
#define BEV_EVENT_EOF
/**& 读到了文件结束符EOF */
#define BEV_EVENT_ERROR
/**& 遇到了不可恢复的错误 */
#define BEV_EVENT_TIMEOUT
/**& 表示计时器的时间到了 */
#define BEV_EVENT_CONNECTED
/**& 表示connect操作完成 */
读写回调函数的原型
这是一个用于bufferevent的读写回调函数
当有新数据到达input buffer时且数据量高于低水位(默认为0),读回调被触发。
当output buffer被清空(已经发送完了)或者低于低水位时,写回调被触发。
@param bev 被调用的函数所属的bufferevent
@param ctx 用户所定义的内容
typedef void (*bufferevent_data_cb)(struct bufferevent *bev, void *ctx);
错误回调函数的原型
bufferevent的错误或者特别事件的回调函数
这个回调会在读到EOF或者遇到不可恢复的错误时被触发
@param bev 遇到错误条件的bufferevent
@param what 是一个联合标志,包含BEV_EVENT_READING 或者 BEV_EVENT_WRITING其中之一表示
错误是在读数据还是写数据时产生,另外还包含一下其中之一个标志 BEV_EVENT_EOF,BEV_EVENT_ERROR,BEV_EVENT_TIMEOUT, BEV_EVENT_CONNECTED
@param ctx 用户指定的内容
typedef void (*bufferevent_event_cb)(struct bufferevent *bev, short what, void *ctx);
创建bufferevent时的可选项
/** Options that can be specified when creating a bufferevent */
enum bufferevent_options {
/** If set, we close the underlying file
* descriptor/bufferevent/whatever when this bufferevent is freed. */
BEV_OPT_CLOSE_ON_FREE = (1&&0),
/** 如果设置了,且多线程选项被打开,则此buffervent受锁保护 */
BEV_OPT_THREADSAFE = (1&&1),
/** If set, callbacks are run deferred in the event loop.(延迟回调?) */
BEV_OPT_DEFER_CALLBACKS = (1&&2),
/** If set, callbacks are executed without locks being held on the
* bufferevent.
This option currently requires that
* BEV_OPT_DEFER_CALLBACKS a future version of Libevent
* might remove the requirement.*/
BEV_OPT_UNLOCK_CALLBACKS = (1&&3)
创建bufferevent
基于一个已存在的socket来创建一个socket bufferevent
@param base 指定为哪个事件循环分配bufferevent
@param fd 需要进行读写的socket文件描述符.
该文件描述符不可是管道( pipe(2)).
fd可以为-1,只要之后调用bufferevent_setfd(重设fd)或者调用bufferevent_socket_connect()(连接不用fd)
@param options 选项可以为0或者BEV_OPT_*类的标志(参考上一段)
@返回新创建的bufferevent结构体的指针,如果出现错误则返回NULL
@see bufferevent_free()
struct bufferevent *bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options);
发起连接connect
Launch a connect() attempt with a socket-based bufferevent.
When the connect succeeds, the eventcb will be invoked with
BEV_EVENT_CONNECTED set.
If the bufferevent does not already have a socket set, we allocate a new
socket here and make it nonblocking before we begin.
If no address is provided, we assume that the socket is already connecting,
and configure the bufferevent so that a BEV_EVENT_CONNECTED event will be
yielded when it is done connecting.
@param bufev an existing bufferevent allocated with
bufferevent_socket_new().
@param addr the address we should connect to
@param socklen The length of the address
@return 0 on success, -1 on failure.
int bufferevent_socket_connect(struct bufferevent *, struct sockaddr *, int);安全检查中...
请打开浏览器的javascript,然后刷新浏览器
< 浏览器安全检查中...
还剩 5 秒&君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
使用libevent编写linux服务
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 libevent函数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信