问:异步和同步是不是用ioctlsocket(s, FIONBIO, &ulBlocking);就可以设置。设置成功后recv,send也是异步的?
答:准确的讲不是的.是否同步还是异步看你初使化Socket时就自动生成了.如果你用WSAStartup()初使化,那么就是同步的.如果你用WSAAsyncSelect初使化,那么就是异步的.但是并不是说异步的和同步的初使化后就不能更改了.用ioctlsocket()可以控制Socket的模式,即更改同异步.但有限制.如果你想把异步的变回为同步的话,得先哦叫WSAAsyncSelect(),将最后一个参数设为0,即取消异步事件.然后再用ioctlsocket()就可以了.
补充:很久没上CSDN了.如答对请给分!
Top
8 楼duyhui(一天到晚游泳的鱼)
回复于 2004-04-29 16:24:34 得分 2
异步和同步用ioctlsocket(s, FIONBIO, &ulBlocking)是可以设置,但是有个前提条件,就是在使用这个函数前,你没有用WSAAsyncSelect(),进行设置.如果已用了WSAAsyncSelect(),那么用ioctlsocket()来设置异步和同步是无效的.
如果设置成功后recv,send也是异步的.
Top
9 楼sevencat(七猫)
回复于 2004-04-29 17:38:53 得分 0
不是异步,异步跟阻塞是两个概念。
Top
10 楼sevencat(七猫)
回复于 2004-04-29 17:50:03 得分 10
异步是你执行了一项操作,不管系统现在能不能做,程序立即返回,但系统在后台帮你在坐,并会以适当的方式通知你。
非阻塞是告诉你现在可以执行某项操作了。
通俗的比方就好像我向人要钱。
一种人是你要隔三差五就去问他:"有没有钱",他只会回答有钱或者没钱,你要一直问他直到他说有钱。
另一种人是直接跟你讲“我有钱了直接把钱打到你卡上,你不用老来找我了...”Top
11 楼halk(不当老大已经很久了)
回复于 2004-04-29 23:31:36 得分 1
sevencat(七猫) ( ) 信誉:97 解释的很好!!
关于阻塞或者同异步的问题看了好几个了,但一直不知道怎么才能解释清楚。唉……早知到小时候就好好学语文了Top
12 楼wangle11111(wangle)
回复于 2004-04-30 01:39:36 得分 2
恩。。是啊。。解释的不错。。学习!!
异步可以通过IOCTLSOCK来设置的。。但如果使用了 WSAASYSELECT的话,它会自动把同步变为异步的,如果想改回来的话,就要再调用一次了。如果没有调用过这个函数,那么当你建立套接字的时候,默认是同步的。。。
而SELECT这个函数是一个I/O模型,用来解决异步的一种方法.WSAASYSELECT也算是一个。。还有很多呢。。。