读书人

socket的select形式算异步通信否?//如

发布时间: 2013-10-18 20:53:13 作者: rapoo

socket的select模式算异步通信否?//如果用用WSAStartup()初使化之后。
本帖最后由 oyljerry 于 2013-10-13 11:53:30 编辑 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[解决办法]

引用:
在下愚钝,ioctlsocket只是链接服务器变成非堵塞链接呗。//我记的connect链接一段时间 就返回timeout 那就是ioctlsocket就是不等待一段时间,连不上就返回呗?

那你说的异步通信是使用事件驱动模式吗? 轮询模式也不算异步呗?

我理解的异步是 服务器不必等待客户端发送信息,同步就是 服务器等待客户端发送信息。
非堵塞是发送消息 不等待发送成功就返回,堵塞是发送消息,等待发送成功就返回。
Quote: 引用:

Quote: 引用:

http://blog.csdn.net/hmsiwtv/article/details/7952266
//大哥这个帖子里说的异步是指的是?

在这个帖子里根本没有看到“异步”处理的代码。

server端用的是 while(TRUE){ if select() ... },实际上是轮询模式。
client端根本就没有用轮询,也没有用事件驱动,只是用while循环不断的阻塞发送、阻塞接收数据。

没事,一起讨论吧。

是的。ioctlsocket(..., FIONBIO,...)用于设置socket处理blocking或者nonblocking模式,这会影响connect accept send recv的运行特性。
nonblocking模式下,connect会立即返回SOCKET_ERROR错误且WSAGetLastError 返回WSAEWOULDBLOCK,详见msdn.

我看MSDN里强调的主要是blocking/nonblocking,没有看到关于socket中的同步异步的明确说法。

我理解所谓socket通讯的异步模式,应该是指使用了WSAAsyncSelect()。Async前缀的意思是异步。那这个"异步"WSAAsyncSelect应该是相对于传统的所谓"同步"select()而言的。

调用了WSAAsyncSelect,就意味着程序应该采用事件驱动模式获取socket事件通知,而不需要去select轮询.

读书人网 >VC/MFC

热点推荐