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

高手看看:select问题

    来源: 互联网  发布时间:2015-09-15

    本文导语:  程序如下; #include   #include   #include   #include   #include   #include   #include   #include   #include   #include   #include    #include    #define  PORT 8801    /*监听端口号*/ main(void) {  int sockfd,new_fd;             ...

程序如下;
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include   
#include   

#define  PORT 8801    /*监听端口号*/

main(void)

int sockfd,new_fd;                      /*socket描述符*/
struct sockaddr_in server_addr;         /*socket结构*/
struct sockaddr_in client_addr;         /*socket结构*/
int sin_size,portnumber=PORT;
pthread_t id;
int i,ret;
char hello[]="Hello! World!n";

/* 服务器端开始建立socket描述符 */ 
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) 

        fprintf(stderr,"Socket error:%sna",strerror(errno));
        exit(1);
}
/* 服务器端填充 sockaddr结构  */ 
bzero(&server_addr,sizeof(struct sockaddr_in)); 
server_addr.sin_family=AF_INET; 
server_addr.sin_addr.s_addr=htonl(INADDR_ANY); 
server_addr.sin_port=htons(portnumber);

/* 捆绑sockfd描述符  */  
if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) 
{
        fprintf(stderr,"Bind error:%sna",strerror(errno)); 
        exit(1);

/* 监听sockfd描述符  */ 
if(listen(sockfd,5)==-1)
{
        fprintf(stderr,"Listen error:%sna",strerror(errno)); 
        exit(1);


        /* 服务器阻塞,直到客户程序建立连接  */ 
        sin_size=sizeof(struct sockaddr_in);
        if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
        { 
                fprintf(stderr,"Accept error:%sna",strerror(errno)); 
                exit(1); 
        }

        fprintf(stderr,"Server get connection from %sn",inet_ntoa(client_addr.sin_addr));
        
        int err;
        fd_set fdR; 
        struct timeval timeout ;
        timeout.tv_sec=10;
        timeout.tv_usec=0;
     
        while(1) {   
                FD_ZERO(&fdR);
                FD_SET(new_fd, &fdR);           
        
                err=select(new_fd + 1, &fdR, NULL, NULL, &timeout);
                
                if(err==-1){
                          printf("error!n");
                          break;                /*error handled by u; */
                       
                }
                else if(err==0){
                          printf("timeout!n");/*timeout hanled by u;*/ 
                       
                }
               else
                   if (FD_ISSET(*fd,&fdR)) { 
                                   printf("read or rev!n");
                   }  
           }
                
close(new_fd);   
        close(sockfd);
   exit(0);
}


|
你的程序有2个地方有问题
timeout.tv_sec=10;
timeout.tv_usec=0;
要放在 while() 循环内部,select执行完毕会清空 timeout

if (FD_ISSET(*fd,&fdR)) { 
                                   printf("read or rev!n");
                   }  
你必须read以下*fd,将数据取走,否则内核不会请空标志位

    
 
 

您可能感兴趣的文章:

  • 高手救命,很急——ORACLE817安装在UNIXWARE711上,手工启动数据库后在netasst中连接错误,高手帮我看看?
  • 各个高手看看这个问题!本人第一次学习java所以要各位高手的帮助。。
  • linux高手看看
  • 请问哪位高手可以帮我远程看看Fedora的安装
  • 高手帮我看看这个错误怎么解决?
  • 高手帮忙看看cr3的值
  • shell 编程 从0到10求和 ,代码有错,请高手看看
  • 郁闷?高手帮看看
  • samba啟動出錯,高手請幫忙看看,謝謝!
  • 关于线程的问题,还请各位高手们能帮着看看
  • 高手请进来看看!
  • 高手看看这段代码错在哪里
  • 有高手看看我提的问题么?
  • 我的resin启动不了,请各位高手帮我看看!
  • linux 启动错误,高手看看怎么回事~~谢
  • 高手们请帮我看看为什么会这样?//在线等候
  • 高薪求Linux开发高手,可兼职,有开发经验的进来看看
  • ubuntu8.04 不能上网和关于update的问题(麻烦高手帮忙看看)
  • 菜鸟,高手都看看,帮帮忙啊,关于密码验证的问题
  • 各位高手,请教一个gcc编译的问题。大家都进来看看!
  • 请问高手:web中如何把多选的select表单中的数据提交到servlet中?(在线等)
  • 关于select函数,请高手指教。在线等 分不够加!!
  • 哪位高手给个unix系统下C语言socket+fork()+select()的例子?
  • 关于select函数,请高手指教。在线等 分不够加!!
  • 关于select函数,哪位高手帮我看看下面这个系统调用的程序那里有问题,帮我修改一下,谢谢。
  • 请教高手,linux中select函数的问题
  • 多客户端Socket的select问题,高手帮忙!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高手,高手,高高手请进!
  • 有熟悉EXIM的高手高手么??
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手) iis7站长之家
  • 高分请高手,高手定能解决
  • 请问高手在linux中用什么命令可以做linux的启动盘???在等待高手??
  • 有高手研究Agent++麽?里面有个thread.h,蛮难读的,请高手指点
  • 难道高手区里的人就是高手?
  • 在dos下用bc31挑战高手******开发mssql程序,连接时报link err:undefined symbol GETNOTE in module DBEXTERN?(挑战高手)
  • 真正的linux高手,请看过来,看你符合高手标准不?
  • 难道这没有高手吗?难道这没有乐于助人的高手?(高分酬谢62+50+50)
  • 关于我对linux高手用yum,非高手用源码的理由
  • 请教高手lvs的奇怪问题,我挺着急,希望高手别潜水,就就我,先谢谢了
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 我是新手,高手,高手,快来救我
  • EJB问题,请教高手(非高手莫进)
  • 请各位JAVA高手,网业高手看过来,我把能给的分都送出!!!只能给37分,哎!!
  • eWEEK沙龙征集高手座谈
  • 高手请进,中文乱码问题,这是我同一个问题的第五个帖子了,大伙帮忙,心情好郁闷.期待高手.
  • [纳闷贴]为什么那么多人非说要成为高手就不要用X,难道Linux就是为了成为高手用的?


  • 站内导航:


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

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

    浙ICP备11055608号-3