Epump Versions Save

ePump是一个基于I/O事件通知、非阻塞通信、多路复用、多线程等机制开发的事件驱动模型的 C 语言应用开发框架,利用该框架可以很容易地开发出高性能、大并发连接的服务器程序。

v2.1.15

2 years ago
  1. When a worker thread starts a timer, such as adding file descriptor or timer to an ePump thread, the ePump thread needs to be awakened from suspension. The wakeup operation is implemented by epwakeup facility. The current version fixed and improved wakeup mechanism.
  2. Respectively compatible with Windows IOCP, Linux EventFD and other ePump wakeup mechanism;
  3. Simplified the procedure of associating wakeup-fd with iodev_t and adding it to monitoring queue of ePump thread.

本版本更新的内容如下:

  1. 工作线程启动定时器等需要往ePump线程中添加监听描述符或定时器时,需要将ePump线程从休眠状态唤醒,唤醒操作是由epwakeup来实现的,这个版本修改并完善了唤醒机制;
  2. 分别兼容Windows IOCP机制和Linux EventFD等几种ePump线程的唤醒机制,整合实现了epcore_wakeup_init, epcore_wakeup_clean, epcore_wakeup_send, epcore_wakeup_recv等;
  3. 简化了wakeup fd关联iodev_t并加入到ePump监控线程的处理流程;

v2.1.14

2 years ago
  1. Added the support of IOCP communication model in Windows for large-scale concurrent connections;
  2. Modified the listening management of mlisten facility, added the multi-local-ip listening and IOCP listening;
  3. Modified the UDP listening handling, added the multi-local-ip listening, added epudp_recvfrom function, added the handling of IOCP datagram;
  4. Modified the procedure of datagram receiving for IOCP;
  5. Added the epiocp file to support IOCP model in Windows;
  6. Added the support of multiple-addresses listening for eptcp_listen and eptcp_mlisten functions when configuring dual-stack of IPv4 and IPv6;
  7. Fixed the check and handle of compatibility for Windows OS;

本版本更新的内容如下:

  1. 增加了Windows系统的IOCP通信模型的支持,可大规模提升通信连接的并发量;
  2. 修改mlisten监听管理,增加本地多地址监听、增加IOCP的监听处理;
  3. 修改了UDP监听管理,增加本地多地址监听、增加了epudp_recvfrom函数来接收网络数据报、增加了IOCP处理;
  4. 修改了epdns的数据报接收处理流程;
  5. 增加了epiocp文件来处理Windows下的IOCP通信模型;
  6. tcp_listen函数增加了支持多个本地IP地址的监听启动,尤其是同一个网卡上采用双栈地址IPv4和IPv6时,相对应的eptcp_listen和eptcp_mlisten都需要增加相对应的多IP支持;
  7. 修订了Windows版本的兼容性判断和处理;

v2.1.10

2 years ago
  1. Compiled and tested the source in FreeBSD, solved the incompatibility of system call;
  2. Added kqueue event notification mechanism in FreeBSD;
  3. Tuned the wakeup facility from kevent blocking in FreeBSD;

本版本更新的内容如下:

  1. 在FreeBSD下完成了编译和调试,解决了系统不兼容问题;
  2. 在FreeBSD系统下,增加了kqueue事件通知机制;
  3. 解决了FreeBSD下,epump线程阻塞在kevent时的唤醒机制;

v2.1.8

2 years ago
  1. The ePump threads need to be waken up instantly when a new device fd or a timer instance is initialized during suspending by select;
  2. UDP socket pair of client and server replaced eventfd as wakeup facility. Fixed the bug that udp socket not initialized during startup;
  3. For select model, the device fd should be removed from monitoring queue when new event is generated, and re-appended when callback of event completed. Fixed the bug not following the rule;
  4. Added functions of set/clear fd monitoring queue, such as iodev_set_poll, iodev_clear_poll;
  5. Replaced 'struct sockaddr' with ep_sockaddr_t in the case of accept, recvfrom, getpeername, getsockname. Solved the problem failing to get correct result of these call in Windows;
  6. ePump is a full-nonblocking framework, even in DNS name resolving process. Added the DNS name server to epump core object from local host configuration.

本版本修改或新增功能描述如下:

  1. 在epump线程处于select阻塞挂起状态时,如果添加一个设备或定时器到监控队列后,需要唤醒epump线程,以便能及时地监控新的设备列表和定时器;
  2. 当没有eventfd设施时,需要采用udp本地客户端和本地服务器端的通信来作为唤醒epump线程的机制,修改了唤醒机制没有初始化的bug;
  3. 对于采用select通信机制的系统,产生事件时,其对应的设备fd需从监控读写队列中摘除,在事件回调处理完后,需要将当前事件对应的设备fd重新添加到监控队列中,按照这个逻辑修正了bug;
  4. 在iodev.c中增加了iodev_set_poll和iodev_clear_poll函数,只负责将设备fd从监控队列中设置和清理,是epump内部使用的函数;
  5. eptcp_accept中接受客户端请求时,使用sockaddr结构在Windows下返回错误,接受不到客户端的连接请求,修改为ep_sockaddr_t结构,来接受客户端请求;另外,recvfrom,getpeername, getsockname等函数,sockaddr地址都修改为ep_sockaddr_t结构;
  6. epdns.c中在Windows下自动获取当前系统配置的DNS域名服务器地址,并添加到epdns的dns_host中,方便系统根据当前配置来采用非阻塞模式解析各种远程地址的域名;

v2.1.6

2 years ago
  1. Fixed the bugs that ioevents can not be generated in select mode;
  2. Fixed the bugs: eventfd was not added monitor list correctly, FDSET in select mode;
  3. incorrectly getting min node from device rbtree caused incorrect handling of event dispatching in select mode;
  4. added one interface: appending DNS name server to epcore_t core object, for facilitating to adopt user-given DNS;

v2.1.4

2 years ago
  1. tuning the processing of big-loop in epump thread;
  2. improve the performance of worker loop;
  3. remove the unnecessary procedures in event executing.

v2.1.2

3 years ago
  1. add DNS resolving functionality for the support of complete non-blocking;
  2. add eptcp_ep_connect function by new DNS resolving, without system call getaddrinfo;
  3. fixed the bug: iodev_t instances created before epump threads started do not work properly;
  4. the callback of DNS resolving success will be delivered to the worker thread that caller invoked;

v2.0.14

3 years ago

ePump-2.0.14.tar.gz is latest and reliable tarball.