zoukankan      html  css  js  c++  java
  • vtun 中的__io_canceled变量和相关函数

    1、__io_canceled在lib.h中定义,

    /* IO cancelation */
    extern volatile sig_atomic_t __io_canceled;

     

    __io_canceled变量影响下列函数,

    static inline int read_n(int fd, char *buf, int len)
    {
        register int t=0, w;

        while (!__io_canceled && len > 0)
        {
            if( (w = read(fd, buf, len)) < 0 )
            {
            if( errno == EINTR || errno == EAGAIN )
            continue;
            return -1;
            }
            if( !w )
                return 0;
            len -= w; buf += w; t += w;
        }

        return t;
    }  

    static inline int write_n(int fd, char *buf, int len)
    {
        register int t=0, w;

        while (!__io_canceled && len > 0)
        {
            if( (w = write(fd, buf, len)) < 0 )
            {
                if( errno == EINTR || errno == EAGAIN )
                    continue;
                return -1;
            }
            if( !w ) return 0;
            len -= w; buf += w; t += w;
        }

        return t;
    }

    2、下面的函数改变__io_canceled变量,

    static inline void io_init(void)
    {
        __io_canceled = 0;
    }

    static inline void io_cancel(void)
    {
        __io_canceled = 1;
    }

    3、

    而io_cancel函数在下面函数中调用,

    static void sig_term(int sig)
    {
        vtun_syslog(LOG_INFO, "Closing connection");
        io_cancel();
        linker_term = VTUN_SIG_TERM;
    }

    static void sig_hup(int sig)
    {
        vtun_syslog(LOG_INFO, "Reestablishing connection");
        io_cancel();
        linker_term = VTUN_SIG_HUP;
    }

    4、

    当内核发出退出或挂起等信号时,会调用sig_term或sig_hup函数,从而改变__io_canceled的值,从而停止read_n  write_n.

  • 相关阅读:
    VS2013专业版+QT5.6.3+qt-vs-addin-1.2.5环境搭建
    提权获取进程路径并获取进程列表
    解决Qt发布的程序在xp环境下提示“无法定位程序输入点 K32GetModuleFileNameExA 于动态链接库 KERNEL32.dll 上”的错误
    QT5中使用Echarts图表组件
    Qt5.9生成dll详细图文教程
    Qt 编程指南 & 选择合适的Qt5版本
    Qt 之 国际化(中英文切换)
    Qt资料
    第三次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2704235.html
Copyright © 2011-2022 走看看