您的位置:首页 > 其它

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

2016-08-20 09:15 417 查看
基础类型

#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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: