libevent学习五(Helper functions and types for Libevent)

基础类型

 

#ifdef WIN32
#define evutil_socket_t intptr_t
#else
#define evutil_socket_t int
#endif

ev_ssize_t

 

时间兼容函数

//前2个参数的计算结果放到第三个参数里面

#define evutil_timeradd(tvp, uvp, vvp) /* ... */
#define evutil_timersub(tvp, uvp, vvp) /* ... */

#define evutil_timerclear(tvp) /* ... */
#define evutil_timerisset(tvp) /* ... */

//前二个参数使用第三个参数指定的比较方式进行比较,其中cmp是所有标准C的关系运算符(>,<,==,<=,>=),成立返回true

#define evutil_timercmp(tvp, uvp, cmp)

//获取当前时间,timeval 是包含秒和微妙的结构体

int evutil_gettimeofday(struct timeval *tv, struct timezone *tz);

example:

struct timeval tv1, tv2, tv3;

/* Set tv1 = 5.5 seconds */
tv1.tv_sec = 5; tv1.tv_usec = 500*1000;

/* Set tv2 = now */
evutil_gettimeofday(&tv2, NULL);

/* Set tv3 = 5.5 seconds in the future */
evutil_timeradd(&tv1, &tv2, &tv3);

/* all 3 should print true */if (evutil_timercmp(&tv1, &tv1, ==))  /* == "If tv1 == tv1" */
   puts("5.5 sec == 5.5 sec");
if (evutil_timercmp(&tv3, &tv2, >=))  /* == "If tv3 >= tv2" */
   puts("The future is after the present.");
if (evutil_timercmp(&tv1, &tv2, <))   /* == "If tv1 < tv2" */

兼容的socket API

int evutil_closesocket(evutil_socket_t s);

#define EVUTIL_CLOSESOCKET(s) evutil_closesocket(s)

#define EVUTIL_SOCKET_ERROR()
#define EVUTIL_SET_SOCKET_ERROR(errcode)
#define evutil_socket_geterror(sock)
#define evutil_socket_error_to_string(errcode)

int evutil_make_socket_nonblocking(evutil_socket_t sock);

int evutil_make_socket_closeonexec(evutil_socket_t sock);

int evutil_socketpair(int family, int type, int protocol,
        evutil_socket_t sv[2]);

方便的字符串操作函数

ev_int64_t evutil_strtoll(const char *s, char **endptr, int base);

int evutil_snprintf(char *buf, size_t buflen, const char *format, ...);
int evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap);

本地字符串操作函数

int evutil_ascii_strcasecmp(const char *str1, const char *str2);
int evutil_ascii_strncasecmp(const char *str1, const char *str2, size_t n);

IPV6 相关函数

const char *evutil_inet_ntop(int af, const void *src, char *dst, size_t len);
int evutil_inet_pton(int af, const char *src, void *dst);

int evutil_parse_sockaddr_port(const char *str, struct sockaddr *out,
    int *outlen);

int evutil_sockaddr_cmp(const struct sockaddr *sa1,
    const struct sockaddr *sa2, int include_port);

方便的结构宏

#define evutil_offsetof(type, field) /* ... */

安全的随机数发生器

void evutil_secure_rng_get_bytes(void *buf, size_t n);

int evutil_secure_rng_init(void);
void evutil_secure_rng_add_bytes(const char *dat, size_t datlen);

时间: 2024-10-19 00:50:09

libevent学习五(Helper functions and types for Libevent)的相关文章

libevent学习五

event loop 事件循环 一旦你向event_base注册了一些event,那你接下来会希望Libevent等待事件的发生并且通知你. 接口 #define EVLOOP_ONCE 0x01 #define EVLOOP_NONBLOCK 0x02 #define EVLOOP_NO_EXIT_ON_EMPTY 0x04 int event_base_loop(struct event_base *base, int flags); 默认情况下,event_base_loop()会一直运行

libevent 学习的网址

学习: http://www.monkey.org/~provos/libevent/doxygen-2.0.1/files.html like MSDN easy to study. 习惯了msdn的这个看到就觉得很亲近..... evdns.h [code]   event.h [code] A library for writing event-driven network servers evhttp.h [code]   evrpc.h [code] This header files

libevent学习笔记(参考libevent深度剖析)

最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的<Libevent源码深度剖析> libevent好处之类的就不赘述了,libevent和libiop,redis等一样都是采用事件回调机制,这种模式 被称作Reactor模式.正常事件处理流程是应用程序调用某个接口触发某个功能,而Reactor模式需要 我们将这些接口和宿主指针(谁调用这些接口)注册在Reactor,在合适的时机Reactor使用宿主指针 调用注册好的回调函数. 一: Reactor基本知

libevent学习之二:Windows7(Win7)下编译libevent

Linux下编译参考源码中的README文件即可,这里主要记录Windows下的编译. 一.准备工作 去官网下载最新的稳定发布版本libevent-2.0.22-stable 官网地址:http://libevent.org/ 二.使用VS2012编译 1.解压libevent到C:\Users\zhang\Desktop\libevent-2.0.22-stable 2.打开“VS2012开发人员命令提示”工具,如下图所示. 3.输入指令开始编译,如下图所示. 有网友说编译之前应该在以下3个文

Beaglebone Back学习五(PWM测试)

PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 Beaglebone Coding 101: Buttons and PWM 4 Using PWM outputs 5 beaglebone-black-cpp-PWM 6 Enabling PWM Support in the kernel 7 Beaglebone Back学习五(PWM测试

Libevent 学习笔记 (1)——Libevent 2.0安装与简单示例

今天开始学习Libevent .Libevent 是开源社区的一款高性能I/O框架库. 主要特点有: 1 跨平台: 2 统一事件源 3 线程安全 4 基于Reactor 今天主要进行了Libevent的安装,以及利用libevent框架编写一个间隔1s打印 Hello Libevent!信息的程序. 首先是安装: 1 下载libevent源码,下载地址http://libevent.org/.我下载的版本是2.0 stable版本,下载的文件格式是tar.gz包 2 进入刚下载得到的tar.gz

TweenMax动画库学习(五)

目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            TweenMax动画库学习(四)            TweenMax动画库学习(五)  

NodeJS学习五 之网页显示

我们新建一个Server.js. 然后运行cmd 找到server.js 路径.  node server.js 浏览器中输入http://localhost:8888/ 你会发现,网页上出现了 Hello World NodeJS学习五 之网页显示,布布扣,bubuko.com

Cmdlet开发与学习(五)

Parameter       在声明cmdlet参数的时候,我们使用了Parameter标识符,在这个标识符中,有些参数需要了解到. 强制参数 设置Mandatory=true即可. 对于强制参数,不管是在命令行中绑定,还是通过管道输入,在命令逻辑执行之前,它就必须绑定好.如果强制参数没有参数值的话,PowerShell会弹出对话框,要求用户提供参数值. 位置参数.       Position= n       有时,我们在使用Powershell的时候,发现仅仅是输入参数值,并没有指定具体