winsock 阻塞的理解:阻塞时,所有套接字阻塞,还是某个套接字阻塞?

解决方案 »

  1.   

    我认为,阻塞时程序控制权交给了正在执行的socket,程序无法得到控制权,这样像程序死了,
    此时其他的socket也不做任何事,这和所有套接字阻塞也有区别,阻塞套接字在工作.
      

  2.   

    阻塞时,所有套接字阻塞
    你用CSocket做个实验就知道了
      

  3.   

    所有的socket都挂起了,
    因为其他socket的不到被当前socket占用的资源
      

  4.   

    BLOCKING是套接字的可以设置的属性,是针对某一套接字,阻塞是指阻塞正在对这个套接字进行IO的线程,不阻塞其他线程对其他套接字的IO操作
      

  5.   

    我认为,阻塞时程序控制权交给了正在执行的socket,程序无法得到控制权,这样像程序死了,
    此时其他的socket也不做任何事,这和所有套接字阻塞也有区别,阻塞套接字在工作.
    --------------
    阻塞的时候,只是该线程处于等待状态,等待该socket上的消息。程序有什么控制权,控制权在cpu手里。线程调度仍然在进行,其他线程仍然会可调度,其它的socket也仍然可以用于工作。
      

  6.   

    阻塞是指阻塞正在对这个套接字进行IO的线程,不阻塞其他线程对其他套接字的IO操作
      

  7.   

    造成阻塞的原因:接收数据时端口缓冲区中无数据,这时如果被绑定的端口设置为阻塞
    式的,则该操作被阻塞在这里,线程被阻塞,直到有数据到来,该操作完成,线程继续执行。
    这个过程中其他端口上的操作是正常的。
    可以使用ioctlsocket(m_nSocket, FIONBIO, (ULONG*)&optval)设置端口为非阻塞。
      

  8.   

    感谢各位的解答
    MFCClass(profan) 说的,我猜测他可能认为是在界面线程里处理socket i/o了,我这个问题不是这个意思,我问的是关于多线程的i/o处理alec626(月吻长河) 这位兄弟可能是经常在界面线程里而不是在工作者线程里操作i/o,所以才有这样的认识除了几个兄弟和我有相同的错误认识,其他兄弟基本上都有清晰、正确的认识,谢谢各位的解答。请大家继续帮忙:
    http://expert.csdn.net/Expert/topic/3029/3029973.xml?temp=.9331629