WEB开发网
开发学院操作系统Linux/Unix 使用 kqueue 在 FreeBSD 上开发高性能应用服务器 阅读

使用 kqueue 在 FreeBSD 上开发高性能应用服务器

 2010-05-21 00:00:00 来源:WEB开发网   
核心提示: ident事件的 id,实际应用中,使用 kqueue 在 FreeBSD 上开发高性能应用服务器(3),一般设置为文件描述符, filter可以将 kqueue filter 看作事件,却没将这个描述符从 kq 中清除,处理 EV_ERROR 类似下面的代码: if (events[i].fl

ident

事件的 id,实际应用中,一般设置为文件描述符。

filter

可以将 kqueue filter 看作事件。内核检测 ident 上注册的 filter 的状态,状态发生了变化,就通知应用程序。kqueue 定义了较多的 filter,本文只介绍 Socket 读写相关的 filter。

EVFILT_READ

TCP 监听 socket,如果在完成的连接队列 ( 已收三次握手最后一个 ACK) 中有数据,此事件将被通知。收到该通知的应用一般调用 accept(),且可通过 data 获得完成队列的节点个数。 流或数据报 socket,当协议栈的 socket 层接收缓冲区有数据时,该事件会被通知,并且 data 被设置成可读数据的字节数。

EVFILT_WRIT

当 socket 层的写入缓冲区可写入时,该事件将被通知;data 指示目前缓冲区有多少字节空闲空间。

E

flags

EV_ADD

指示加入事件到 kqueue。

EV_DELETE

指示将传入的事件从 kqueue 中移除。

EV_ENABLE

过滤器事件可用,注册一个事件时,默认是可用的。

EV_DISABLE

过滤器事件不可用,当内部描述可读或可写时,将不通知应用程序。第 5 小节有这个 flag 的用法介绍。

EV_ERROR

一个输出参数,当 changelist 中对应的描述符处理出错时,将输出这个 flag。应用程序要判断这个 flag,否则可能出现 kevent 不断地提示某个描述符出错,却没将这个描述符从 kq 中清除。处理 EV_ERROR 类似下面的代码: if (events[i].flags & EV_ERROR) close(events[i].ident); fflags 过滤器相关的一个输入输出类型标识,有时候和 data 结合使用。

data

上一页  1 2 3 4 5 6 7 8  下一页

Tags:使用 kqueue FreeBSD

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接