补充:
WSARecv和WSASend也是异步的。
根据标题所述设置成异步后recv,send也相当于WSARecv和WSASend?
谢谢

解决方案 »

  1.   

    确切的名次,应该叫非阻塞。
    可以看看WSA***跟recv,send的参数区别,WSA***有用于重叠操作的参数。
      

  2.   

    问:异步和同步是不是用ioctlsocket(s, FIONBIO, &ulBlocking);就可以设置。设置成功后recv,send也是异步的?
    答:准确的讲不是的.是否同步还是异步看你初使化Socket时就自动生成了.如果你用WSAStartup()初使化,那么就是同步的.如果你用WSAAsyncSelect初使化,那么就是异步的.但是并不是说异步的和同步的初使化后就不能更改了.用ioctlsocket()可以控制Socket的模式,即更改同异步.但有限制.如果你想把异步的变回为同步的话,得先哦叫WSAAsyncSelect(),将最后一个参数设为0,即取消异步事件.然后再用ioctlsocket()就可以了.
    补充:很久没上CSDN了.如答对请给分!
      

  3.   

    如果你用WSAStartup()初使化,那么就是同步的.如果你用WSAAsyncSelect初使化,那么就是异步的.----------------
    老大,这句话什么意思?不懂不懂。
      

  4.   

    靠,看清msdn上,用这之间要用select ,的啊
      

  5.   

    阻塞编程:
    winsock 阻塞的理解:阻塞时,所有套接字阻塞,还是某个套接字阻塞?
    比如:在程序的某个地方:recv(sk_1, ......) //塞住了
    同时另一处执行  :send(sk_2, ......) //这里会塞住吗?
    请各位帮忙释疑?
      

  6.   

    异步和同步用ioctlsocket(s, FIONBIO, &ulBlocking)是可以设置,但是有个前提条件,就是在使用这个函数前,你没有用WSAAsyncSelect(),进行设置.如果已用了WSAAsyncSelect(),那么用ioctlsocket()来设置异步和同步是无效的.如果设置成功后recv,send也是异步的.
      

  7.   

    sevencat(七猫) ( ) 信誉:97 解释的很好!!
    关于阻塞或者同异步的问题看了好几个了,但一直不知道怎么才能解释清楚。唉……早知到小时候就好好学语文了
      

  8.   

    恩。。是啊。。解释的不错。。学习!!异步可以通过IOCTLSOCK来设置的。。但如果使用了 WSAASYSELECT的话,它会自动把同步变为异步的,如果想改回来的话,就要再调用一次了。如果没有调用过这个函数,那么当你建立套接字的时候,默认是同步的而SELECT这个函数是一个I/O模型,用来解决异步的一种方法.WSAASYSELECT也算是一个。。还有很多呢