1 Linux 安装 Libevent

Libevent官网:http://libevent.org/

在线文档:http://www.wangafu.net/~nickm/libevent-2.0/doxygen/html/

下载地址:https://github.com/libevent/libevent/releases/

解压,编译,安装

创建文件夹
[email protected]:~$ mkdir libevent
[email protected]:~$ cd libevent/

解压文件:
[email protected]:~/libevent$ tar xf libevent-2.0.22-stable.tar.gz 
[email protected]:~/libevent$ cd libevent-2.0.22-stable/

编译环境检查:
[email protected]:~/libevent/libevent-2.0.22-stable$ ./configure 
[email protected]:~/libevent/libevent-2.0.22-stable$ echo $?
0

编译:
[email protected]:~/libevent/libevent-2.0.22-stable$ make -j 8
[email protected]:~/libevent/libevent-2.0.22-stable$ echo $?
0

安装:
[email protected]:~/libevent/libevent-2.0.22-stable$ sudo make install 
[email protected]:~/libevent/libevent-2.0.22-stable$ echo $?
0

删除临时文件:
[email protected]:~$ cd libevent/libevent-2.0.22-stable/
[email protected]:~/libevent/libevent-2.0.22-stable$ cd ..
[email protected]:~/libevent$ rm -rf libevent-2.0.22-stable
[email protected]:~/libevent$ echo $?
0

测试程序:

[email protected]:~/libevent$ cat hello-world.c 
/*
  This exmple program provides a trivial server program that listens for TCP
  connections on port 9995.  When they arrive, it writes a short message to
  each client connection, and closes each connection once it is flushed.

  Where possible, it exits cleanly in response to a SIGINT (ctrl-c).
*/

#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <signal.h>
#ifndef WIN32
#include <netinet/in.h>
# ifdef _XOPEN_SOURCE_EXTENDED
#  include <arpa/inet.h>
# endif
#include <sys/socket.h>
#endif

#include <event2/bufferevent.h>
#include <event2/buffer.h>
#include <event2/listener.h>
#include <event2/util.h>
#include <event2/event.h>

static const char MESSAGE[] = "Hello, World!\n";

static const int PORT = 9995;

static void listener_cb(struct evconnlistener *, evutil_socket_t,
    struct sockaddr *, int socklen, void *);
static void conn_writecb(struct bufferevent *, void *);
static void conn_eventcb(struct bufferevent *, short, void *);
static void signal_cb(evutil_socket_t, short, void *);

int
main(int argc, char **argv)
{
	struct event_base *base;
	struct evconnlistener *listener;
	struct event *signal_event;

	struct sockaddr_in sin;
#ifdef WIN32
	WSADATA wsa_data;
	WSAStartup(0x0201, &wsa_data);
#endif

	base = event_base_new();
	if (!base) {
		fprintf(stderr, "Could not initialize libevent!\n");
		return 1;
	}

	memset(&sin, 0, sizeof(sin));
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);

	listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
	    LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, -1,
	    (struct sockaddr*)&sin,
	    sizeof(sin));

	if (!listener) {
		fprintf(stderr, "Could not create a listener!\n");
		return 1;
	}

	signal_event = evsignal_new(base, SIGINT, signal_cb, (void *)base);

	if (!signal_event || event_add(signal_event, NULL)<0) {
		fprintf(stderr, "Could not create/add a signal event!\n");
		return 1;
	}

	event_base_dispatch(base);

	evconnlistener_free(listener);
	event_free(signal_event);
	event_base_free(base);

	printf("done\n");
	return 0;
}

static void
listener_cb(struct evconnlistener *listener, evutil_socket_t fd,
    struct sockaddr *sa, int socklen, void *user_data)
{
	struct event_base *base = user_data;
	struct bufferevent *bev;

	bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
	if (!bev) {
		fprintf(stderr, "Error constructing bufferevent!");
		event_base_loopbreak(base);
		return;
	}
	bufferevent_setcb(bev, NULL, conn_writecb, conn_eventcb, NULL);
	bufferevent_enable(bev, EV_WRITE);
	bufferevent_disable(bev, EV_READ);

	bufferevent_write(bev, MESSAGE, strlen(MESSAGE));
}

static void
conn_writecb(struct bufferevent *bev, void *user_data)
{
	struct evbuffer *output = bufferevent_get_output(bev);
	if (evbuffer_get_length(output) == 0) {
		printf("flushed answer\n");
		bufferevent_free(bev);
	}
}

static void
conn_eventcb(struct bufferevent *bev, short events, void *user_data)
{
	if (events & BEV_EVENT_EOF) {
		printf("Connection closed.\n");
	} else if (events & BEV_EVENT_ERROR) {
		printf("Got an error on the connection: %s\n",
		    strerror(errno));/*XXX win32*/
	}
	/* None of the other events can happen here, since we haven‘t enabled
	 * timeouts */
	bufferevent_free(bev);
}

static void
signal_cb(evutil_socket_t sig, short events, void *user_data)
{
	struct event_base *base = user_data;
	struct timeval delay = { 2, 0 };

	printf("Caught an interrupt signal; exiting cleanly in two seconds.\n");

	event_base_loopexit(base, &delay);
}

编译运行:
[email protected]:~/libevent$ gcc hello-world.c -l event -Wall  && ./a.out 

查看端口监听:
[email protected]:~$ sudo netstat -tanlp | grep a.out
tcp        0      0 0.0.0.0:9995            0.0.0.0:*               LISTEN      7740/a.out      

本机IP
[email protected]:~$ ifconfig eth0
eth0      Link encap:以太网  硬件地址 00:0c:29:c8:7a:35  
          inet 地址:11.11.11.5  广播:11.11.11.255  掩码:255.255.255.0

----------------------------------

局域网其他机子访问测试:
[email protected]:~ $ nc 11.11.11.5 9995
Hello, World!
[email protected]:~ $ nc 11.11.11.5 9995
Hello, World!
时间: 2024-10-26 02:07:36

1 Linux 安装 Libevent的相关文章

linux 安装libevent

今天再ubuntu下安装libevent,下载源码 tar -xzvf libevent-1.4.15.tar.gz cd libevent-1.4.15 ./configure make make install   #可能需要sudo 自动安装在/usr/local/lib目录下面,如果如下链接错误,或者编译成功运行可执行文件提示can't open share object什么的,请在~/.profile中添加 export LD_LIBRARY_PATH=/usr/local/lib:$

1.Linux下libevent和memcached安装

?? 1 下载libevent-2.0.22-stable.tar.gz,下载地址是:http://libevent.org/ 2 下载memcached,下载地址是:http://memcached.org/downloads 3 下面通过源码安装libevent和memcache,将上面两个gz包上传到Linux上,上传后的位置: 4 在Linux上分别解压libevent和memcache. 由于memcached依赖libevent,这里先安装libevent,再安装memcached

Linux安装Memcached服务

环境: CentOS 6.4 libevent-1.4.14b-stable memcached-1.4.21 查看是否安装libevent[[email protected] ~]# rpm -qa |grep libevent 一.下载Memcache服务器端 memcache官网:http://memcached.org/ libevent官网:http://www.monkey.org/~provos/libevent/ Memcache用到了libevent这个库用于Socket的处理

linux 安装memcached

一.安装libevent sudo wget http://www.monkey.org/~provos/libevent-1.3.tar.gzsudo tar zxvf libevent-1.3.tar.gzcd libevent-1.3sudo ./configure -prefix=/usrsudo makesudo make install查看libevent是否安装成功:ls -al /usr/lib | grep libevent 二.安装Memcachedsudo wget htt

memcached在linux安装

服务器端主要是安装memcache服务器端.下载:http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.3.(如果你的系统已经安装了libevent,可以不用安装)官网:http://www.monkey.org/~provos/libevent/下载:http://www.mon

redhat linux安装memcached

一.环境 1.操作系统:redhat linux 5.5 2.libevent:libevent-2.0.21-stable.tar.gz memcached:memcached-1.4.21.tar.gz 二.安装 1.因为memcached依赖libevent,故需要先安装libevent. 2.源码安装,进入安装包所在目录,执行以下命令: tar -zxvf libevent-2.0.21-stable.tar.gz 将安装包解压, 然后进入解压后的目录,执行安装命令: ./configu

linux安装(Ubuntu)——(二)

centos的安装参考: http://www.runoob.com/linux/linux-install.html Linux 安装(Ubuntu) 虚拟机:虚拟机(Virtual Machine),在计算机科学中的体系结构里,是指一种特殊的软件,他可以在计算机平台和终端用户之间建立一种环境,而终端用户则是基于这个软件所建立的环境来操作软件.在计算机科学中,虚拟机是指可以像真实机器一样运行程序的计算机的软件实现. 一.    安装Vmware 虚拟机 第一步:执行VMware-worksta

linux安装 apache2.2 django mod_wsgi

系统是ubuntu12.04 一.安装apache sudo apt-get install apache 启动:sudo apachectl start (开机默认启动的) 重启:sudo apachectl restart 关闭:sudo apachectl stop 安装之后在浏览器中访问127.0.0.1,如果出现"It works!" 这样的网页,说明安装成功啦. 二.安装mod_wsgi: 我在官网上下载的源码:https://code.google.com/p/modws

Linux安装Eclipse及项目部署

安装Eclipse 1. 首先解压Eclipse tar -zxvf eclipse-standard-kepler-SR1-linux-gtk.tar.gz -C user/local/src 2. 重新启动 加载JDK 3. 桌面创建快捷方式 Create Launcher 选择启动文件 切换图标 项目部署 1. 首先打开压缩文件 $ unzip text.zip 2. 然后修改 .sql文件的编码 查看文件编码 file bank.sql 修改文件编码 iconv -f GBK -t UT