wangbin579/tcpcopy — pull request #8 by skoo87 (2012-07-24 12:59:54+00:00)
Title: Event loop layer and select module

1、实现一个event loop抽象层，方便以后扩展其他io多路复用实现，比如：epoll，跨平台到bsd的kqueue等。
2、实现select模块
a、解决了原生select server实现在添加事件的时候，不能添加fd的值大于1024的情况，一个繁忙的线上系统，0 - 1024的fd极有可能早被应用给霸占了。
b、select server实现中调用select的时候没有提供timeout参数，如果在一个没有读事件发生的系统中，事件循环将无限空跑，占用cpu到100%。select module采用了500ms的timeout。
c、优化实现了删除事件的操作，避免了遍历整个数组，逐个进行元素的复制。
d、select module支持写事件。后续可以使用在发送消息操作上，目前发送消息失败，貌似没有进行事件处理。
3、event loop为了兼容原生的select server，因此添加了一些select server接口的wrapper函数。当然，个人认为合并select server到select module，可以减少一些冗余代码。

4、默认tcpcopy使用原生的select server，"-i select"参数可以使用select module。intercept程序还没支持select module.

event loop还需要提供定时器机制，就可以较完美的处理定时任务，比如：每过几秒钟打印一次系统资源的消耗情况，可能优于目前采用的收到多少个事件后就打印一次。

欢迎大家拍砖，讨论。