监听套节字是非阻塞的:
u_long s = 1;
ioctlsocket(l, FIONBIO, &s);现在accept:
SOCKET newsock = accept(l, ...);这里的newsock是阻塞的还是非阻塞的?另:如何通过函数去获取套节字的阻塞性?
如果回答是getsockopt的话,请明示怎么用,我没看明白。

解决方案 »

  1.   

    默认情况下,所有套接字在创建后,都是阻塞的。可以通过ioctrl来使其变为非阻塞的。
    ULONG   NONBLOCK=1;   
      ioctlsocket(listensocket,FIONBIO,&NONBLOCK);或者调用 WSAAsyncSelect 函数也会使得 socket 变为非阻塞的。
      

  2.   

    好像没有api直接得到,只能通过自己写代码判断,比如启动新线程调用recv看看是不是一直等待没有返回
      

  3.   

    getsockopt(s,SOL_SOCKET,SO_TYPE,&so_type,&optlen);这个函数的第三个参数在MSDN上是这样说的:
    SO_TYPE int The type of the socket (for example, SOCK_STREAM). 
    返回值保存在so_type中,呵呵后面就不用我说了吧
    嘿嘿把分全部给我吧!
      

  4.   

    通过判断返回值是SOCK_STREAM还是SOCK_DGRAM就可以知道是阻赛还是非阻塞了
      

  5.   

    记得是会从Accept获取的套接字继承的
      

  6.   

    这个是区分TCP和UDP的吧..........
      

  7.   

    newsock应该还得需要ioctlsocket设置一次,