使用select函数判断一个套接字是否可读时,还是要使用轮询的方式,无限死循环来判断当前套接字上是否有数据可读,我觉得这和最原始的recv阻塞操作相比没多大的效率可言。不知道使用select函数和使用recv直接读相比,优势在哪里呢?我刚学SOCKET编程,肯能问的问题比较菜,麻烦大家帮忙讲解一下~

解决方案 »

  1.   

    select可以设置超时值啊,优势就是可以管理多个套接字
      

  2.   


    可以管理多个套接字我理解,可是如果我想第一时间就知道一个套接字可读了,即使可以设置超时值,不还是要无限循环去查询状态吗,cpu不一样还是一直给这个线程分配。
      

  3.   

    SELECT可以改变socket的默认设置
      

  4.   

    怎么会无限的去查询状态?
    select是系统底层实现的
    没有数据到来select是将线程挂起的
    有数据来系统会通过信号通知select
      

  5.   

    使用Recv的话,那来个客户连接,就得开个线程
    但使用Select可以只开一个接收线程
      

  6.   

    select可以用来管理多个套接字
      

  7.   


    恩,我一直以为select是非阻塞的,原来是阻塞的,我明白了,谢谢~
      

  8.   


    这样看来,您在1楼说的2点确实是select模型很好的2个优势。
      

  9.   

    明白就好,select可以在一个线程里管理多个套接字
    小的客户端系统完全可以用简单易用的IO模型来实现
    默认的数组不是很大好像是64,你可以改大一些,我
    试改过 设置为8000多也跑得很好,select的特点就是简单
      

  10.   


    该尝试改大点。这个简单。IOCP 那东东复杂。。恼火!