据我所知,windows的socket默认是阻塞模式,CAsyncSocket是非阻塞模式,CSocket是非阻塞模式的阻塞socket.阻塞非阻塞可以通过ioctlsocket函数来设置。
问题一:同步和异步是怎么规定的?有没有严格的要求?是不是一个请求以后,只有收到对方回应以后才可以发下一个请求,一问一答的关系?问题二:阻塞是对socket对象而言吗?我觉得阻塞是广义的,在非阻塞socket下,像gethostbyname等I/O函数起到阻塞作用。问题三:非阻塞和异步,处理起来比较复杂,但效率高。异步的是不是一定是非阻塞的(我认为是)?非阻塞的能不能做同步(我认为不能)?欢迎大家各抒己见,参与的人,人人有分!!
分不够另开帖子!!!!
问题一:同步和异步是怎么规定的?有没有严格的要求?是不是一个请求以后,只有收到对方回应以后才可以发下一个请求,一问一答的关系?问题二:阻塞是对socket对象而言吗?我觉得阻塞是广义的,在非阻塞socket下,像gethostbyname等I/O函数起到阻塞作用。问题三:非阻塞和异步,处理起来比较复杂,但效率高。异步的是不是一定是非阻塞的(我认为是)?非阻塞的能不能做同步(我认为不能)?欢迎大家各抒己见,参与的人,人人有分!!
分不够另开帖子!!!!
至于同步,一般来讲,阻塞肯定是同步的,如果你采用某种io异步模型的话,则会自动改为非阻塞,比如用事件异步,当接受缓冲有数据时,系统会产生一个FD_READ事件,告诉你“现在可以调用recv接受了”,而不必盲目的调用recv扑个空。
其实,阻塞非阻塞是“套接字模式”的概念,而谈“异步”时,接触的应是“套接字io模型”的概念。
阻塞及非阻塞是指socket所具有的两种模式。
而同步异步则是指被call得socket api得返回时机。
zhaolaoxin()所说是指,特定操作完成后返回。
再者,我个人不赞成把CSocket定义为非阻塞模式的阻塞socket,不妥善,更不易于理解。虽然总所周知,它是从CAsyncSocket派生而来得,但是它默认得特性与CAsyncSocket所具有的完全不同。
希望大家提出批评指教。
而不象在阻塞时1.1中等待返回值或是轮询