zoukankan      html  css  js  c++  java
  • 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);
     
     
     
     
  • 相关阅读:
    了解 NoSQL 的必读资料
    关于什么时候用assert(断言)的思考
    这次见到了一些大侠
    NetBeans 时事通讯(刊号 # 87 Jan 12, 2010)
    动态链接库dll,静态链接库lib, 导入库lib
    新女性十得 写得了代码,查得出异常
    记录系统乱谈
    新女性十得 写得了代码,查得出异常
    fullpage.js禁止滚动
    RunningMapReduceExampleTFIDF hadoopclusternet This document describes how to run the TFIDF MapReduce example against ascii books. This project is for those who wants to experiment hadoop as a skunkworks in a small cluster (110 nodes) Google Pro
  • 原文地址:https://www.cnblogs.com/manziluo/p/5789639.html
Copyright © 2011-2022 走看看