牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

libevent echo server example

from:http://unx.ca/log/2006/08/29/libevent-echo-server-example/

libevent is an API that allows you to easily write non-blocking networking apps. It abstracts the differences between poll, select, kqueue, epoll and /dev/poll allowing you to automatically take advantage of the best mechanism provided by the OS you are running on with a fallback to the ubiquitous select. For I/O bound applications this is a great alternative to introducing threads to your application.

This is another one of those examples that I’ve had to provide to people before, usually part of my attempt to get them to use libevent rather than using threads to support multiple connections.

The first example, libevent_echosrv1.c simplifies the basic libevent based server by not properly handling writing to a non-blocking socket.

The second example, libevent_echosrv2.c properly handles writing data by queueing the data to be echoed back to the client with a TAILQ and waiting for libevent to call the write callback, at which point it writes as much data as it can to the socket. If there is more data to be written, the application re-adds the write event so the application is notified when it can write more data. This buffering of data adds a lot of complexity to the first example, but is necessary except for in trivial examples.

Example code: libevent_echosrv-20060829.tar.gz

References:

posted on 2007-08-21 01:29 杨粼波 阅读(1738) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理