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.

  • 相关阅读:
    Windows CMD中 find命令(字符串查找)
    网络地址转换静态NAT
    网络地址转换静态NAT
    Android 的暗示 hint 用法
    Android 的暗示 hint 用法
    SQL Server 扩展事件
    SQL Server 扩展事件
    SqlServer中Exists的使用
    SqlServer中Exists的使用
    数据库还原,System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。
  • 原文地址:https://www.cnblogs.com/helloweworld/p/2704235.html
Copyright © 2011-2022 走看看