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

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

 2010-05-21 00:00:00 来源:WEB开发网   
核心提示: 29~40,创建监听 socket,使用 kqueue 在 FreeBSD 上开发高性能应用服务器(5),将监听 socket 注册到 kq,然后等待事件,当有事件过来时,kevent 返回, 90,这一行就是 kevent 事件等待方法

29~40,创建监听 socket,将监听 socket 注册到 kq,然后等待事件。 90,这一行就是 kevent 事件等待方法,将 changelist 和 nchangelist 分别置成 NULL 和 0,并且传一个足够大的 eventlist 空间给内核。当有事件过来时,kevent 返回,这时调用 HandleEvent 处理可用事件。

struct kevent data 字段在 accept 和 recv 时的用法

清单 3. 接收数据

 101 void HandleEvent(int kq, struct kevent* events, int nevents) 
 102 { 
 103   for (int i = 0; i < nevents; i++) 
 104   { 
 105     int sock = events[i].ident; 
 106     int data = events[i].data; 
 107 
 108     if (sock == listener_) 
 109       Accept(kq, data); 
 110     else 
 111       Receive(sock, data); 
 112   } 
 113 } 
 114 
 115 void Accept(int kq, int connSize) 
 116 { 
 117   for (int i = 0; i < connSize; i++) 
 118   { 
 119     int client = accept(listener_, NULL, NULL); 
 125 
 126     if (!Register(kq, client)) 
 131   } 
 132 } 
 133 
 134 void Receive(int sock, int availBytes) 
 135 { 
 136   int bytes = recv(sock, buf_, availBytes, 0); 
 145   Enqueue(buf_, bytes); 
 146 } 

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

Tags:使用 kqueue FreeBSD

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