当前位置:  技术问答>linux和unix

请教select函数等待超时的问题

    来源: 互联网  发布时间:2016-11-12

    本文导语:  先上代码:     int select_ret;     struct timeval timeout = {3,0};     int maxfd = remote_sock_fd + 1;     fd_set sel_fds;     while(!process_exit){         //asynchronous         FD_ZERO(&sel_fds);         FD_SET(remote_s...

先上代码:

    int select_ret;
    struct timeval timeout = {3,0};
    int maxfd = remote_sock_fd + 1;
    fd_set sel_fds;

    while(!process_exit){

        //asynchronous
        FD_ZERO(&sel_fds);
        FD_SET(remote_sock_fd,&sel_fds);

        printf("Starting select() n"); // 打印select之前的断点
        select_ret = select(maxfd,&sel_fds,NULL,NULL,&timeout);

        switch(select_ret){
            case 0:
                printf("select() timeout n");
                break;
            case -1:
                printf("Error occurs when select() n");
                break;
            default:
                if(FD_ISSET(remote_sock_fd,&sel_fds)){
                    recv_from_remote();
                }
        }



很简单的一段代码,用select判断socket套接字是否有数据读,
问题描述如下:代码里的select超时时间是3秒,测试过程中不向接受段发送任何数据,程序在终端显示如下:

Starting select()
select() timeout
Starting select()
select() timeout
Starting select()
select() timeout
Starting select()
select() timeout
...循环显示

第一次打印“Starting select()” 和 “select() timeout” 之间相差了3秒,和预想的一样;
之后的“Starting select()” 和 “select() timeout”就开始没有时间间隔了,打印出“Starting select()”就立刻执行到“select() timeout”,这就和预想的情况不一样了,为什么之后的select()就没有3妙的间隔了呢?

|
timeout变量的值在第一次select以后被系统改变了。。不再是3秒。。。你应该用一个临时变量来传递timeout的值。。作为select的参数。。这样。。每次重新select以前先把那个临时变量的值赋为timeout的值

|
select_ret = select(maxfd,&sel_fds,NULL,NULL,&timeout);

select会修改sel_fds 及 timeout 参数
在循环中为这两个参数赋值就可以了

    
 
 

您可能感兴趣的文章:

  • 请教:怎样在 UNIX 设置 telnet 未动作超时时间
  • 100分请教高手一个 android串口控制台和i2c超时的问题(本人结贴率达到90%)
  • 请教高手 网络超时问题
  • 请教一段代码的意思,信号和超时的
  • 高分请教:怎样在Kdevelop不能够Trace构造函数?(其他函数可以Trace)
  • 请教:javascript 里有没有时间循环执行的函数,如我按住鼠标触发mousedown 事件函数时,反复执行我写的一个函数?
  • 请教semop()函数的用法、含义
  • 请教套接字中的select()函数问题
  • 请教一个函数入口处的汇编问题(压栈问题)
  • 请教一个关于ftw函数的问题!
  • 100分请教高手一个bash函数
  • 请教signal函数的用法!
  • 请教exec系列函数的用法
  • 请教UNIX C字符输入的检测函数?
  • 请教关于dlopen,动态库连接程序的输出函数
  • 请教select函数
  • (菜鸟请教)还有修改/etc/passwd文件用什么函数呢?
  • linux下time函数问题请教高手
  • 请教一个网络编程问题,accept函数的,在线等,急。。。
  • 请教一个取时间的函数,急!!!!!!!!!!!!!!!!
  • 请教,JavaScript中能不能调用JSP写的函数?
  • 请教:clock_gettime函数的使用问题
  • 请教 变量= { function:函数名};什么意思
  • signal 函数请教
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在线等待!!请教soloaris9 for x86的安装方法
  • <请教如何把IP地址转为主机名,焦急等待中...请高手帮忙>
  • 急,在线等待!!!请教个问题,linux下的远程控制软件是什么,可以在那里取得,多谢?
  • 请教DNS问题?在线等待
  • 请教系统启动过程中的一个问题!在线等待!!
  • 请教:jdbNavList如何才能出现滚动条?(在线等待)
  • 在线等待!请教Linux中删除用户使用什么命令?
  • 在线等待: 请教red hat 9下一流的汉化软件
  • 在线等待回音,请教各位同仁如何中断I/O阻塞问题
  • 菜鸟请教linux下编程怎么用--------在线等待
  • 在线等待,菜鸟请教linux下邮件配置
  • 急,在线等待!!!请教各位同仁一个多线程的问题??
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • 请教:pthread_join( )在等待一个已经退出的线程时为何会导致死锁?
  • 请教大虾关于红旗5.0的安装问题(在线等待)
  • 请教关于利用java把文件打包的问题,希望能够得到简单的回答,在线等待结帖
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!! iis7站长之家
  • 高分请教关于用java实现的telnet原代码在线等待
  • 急急急!!!请教一个关于对象数组的问题,在线等待
  • 请教JS脚本问题!!急。在线等待。
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3