zoukankan      html  css  js  c++  java
  • 网络IO超时的几种实现

    一、select/poll/epoll

    int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);

    timeout为等待的指定时间,当有描述符符合条件  或是  超过超时时间的话,函数返回,可以利用timeout完成超时的判断

    int poll ( struct pollfd * fds, unsigned int nfds, int timeout);

    timeout为等待的指定时间,当有描述符符合条件  或是  超过超时时间的话,函数返回,可以利用timeout完成超时的判断

    int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);

    timeout为等待的指定时间,当有描述符符合条件  或是  超过超时时间的话,函数返回,可以利用timeout完成超时的判断

    示例 使用epoll时的nginx

    NewImage

    timer为最早一个超时的事件的超时值,或为一个默认值

    NewImage

    二、libcurl库提供的超时配置

    curl_easy_setopt(xxx, CURLOPT_CONNECTTIMEOUT_MS, yyy);尝试连接等待的时间,以毫秒为单位。如果设置为0,则无限等待。
    curl_easy_setopt(xxx, CURLOPT_TIMEOUT_MS,yyy);   设置cURL允许执行的最长毫秒数

    三、alarm/setitimer

    通过指定间隔时间发出SIGALRM信号,在检查是否有时间超时

    示例:

    nginx定时器

    NewImage

    nginx提供了利用settimer每隔一段时间 唤起epoll_wait,在检查是否有时间超时的方式,避免了频繁调用gettimeofday的系统函数

    四、利用recv/send提供的超时参数配置

    setsockopt 可以对socket句柄设置各种参数,其中包括了SO_SNDTIMEO, SO_RCVTIMEO两个选择,他们可以控制使用recv, send时候的超时时间,但该参数不是对所有的系统都生效的

  • 相关阅读:
    WPF框架MVVM简单例子
    向WPF的Grid里面增加控件
    静态资源(StaticResource)和动态资源(DynamicResource)
    WPF中INotifyPropertyChanged用法与数据绑定
    wpf 绑定数据无法更新ui控件可能存在的问题
    C#调用Resources.resx资源文件中的资源
    C# 委托的理解
    Codeforces 524E Rooks and Rectangles 线段树
    Codeforces 1000F One Occurrence 主席树|| 离线+线段树
    GYM 101673 A
  • 原文地址:https://www.cnblogs.com/magicsoar/p/8759429.html
Copyright © 2011-2022 走看看