在使用WSAAsyncSelect中的搜集到的一些资料以及发现的一些问题
2010年12月16日
1. WSAEWOULDBLOCK 错误说明
在非锁定套接字上
函数名 说明
WSAAccept, accept 应用程序没有收到连接请求,再次调用,便可检查连接情况
closesocket 大多数情况下,这个错误意味着已随SO_LINGER选项一道调用了
setsockopt,而且已设定了一个非零的超时值
WSAConnect, connect 应用程序已初始化,再次调用,便可检查是否完成
WSARecv,recv
WSARecvFrom, recvfrom 没有收到数据,销后再次检查
WSASend, send
WSASendTo, sendto 外出数据无缓冲区可用,销后再试
2. FD_WRITE 触发条件
只有在三种条件下,才会发出 FD_WRITE 通知:
. connect, WSAConnect ,一个套接字首次建立了连接;
. accept, WSAAccept, 套接字被接受以后;
. send, WSASend, sendto, WSASendTo操作失败,返回了 WSAEWOULDBLOCK 错误,而且缓冲再次变得可用时。
碰到了问题:
我现在碰到WSAEWOULDBLOCK错误消息的时候,场景很有可能是这样子的:
1.发送缓冲满了;
2.处于忙状态。
如何解决
一般来说,第一种场景是不太多发生的,而是第二种情况会很多,有可能是网络不好也有可能是服务器处理不及很繁忙。MSDN里面显示,在此时,如果发送缓冲空出来,系统会发送一个FD_WRITE消息给发送者,这时候再把发送失败的包重新发送即可。如果是缓冲区满了导致的,那么肯定会触发一条FDWRITE消息的。不过也有可能是因为忙,那么,我们可以在触发了WSAEWOULDBLOCK错误的时候,把数据放置到队列里面,给自己发送一条FD_WRITE或许也是可行的办法。
不过根据上面的资料显示,触发条件总共有三种,收到此消息的时候可能不能辨别究竟是哪一个,其实这个很好办,只要设置一个发送队列,如果发送队列不为空,那么发送之,否则就重新进行连接或者重新进行接受。
转自http://www.cppblog.com/tx7do/archive/2009/09/14/96 079.html
发表评论
-
关于latch free等待事件
2012-01-20 02:55 1018关于latch free等待事件 2010年08月03日 ... -
Delphi IDE扩展开发向导
2012-01-20 02:55 1406Delphi IDE扩展开发向导 2 ... -
网络编程常见问题总结
2012-01-20 02:54 677网络编程常见问题总结 2010年10月26日 网络编程常 ... -
网桥的工作原理与应用
2012-01-20 02:54 1069网桥的工作原理与应用 ... -
【黑客】利用VBS脚本让QQ永远在线,等级速升
2012-01-19 13:28 561【黑客】利用VBS脚本让QQ永远在线,等级速升 2010年0 ... -
用vbs实现获取电脑硬件信息的脚本-1
2012-01-19 13:28 943用vbs实现获取电脑硬件信息的脚本-1 2011年11月19 ... -
Adsutil.vbs在脚本入侵中的妙用
2012-01-19 13:28 921Adsutil.vbs在脚本入侵中的妙用 2011年03月0 ... -
利用VBS脚本让qq永远在线
2012-01-19 13:28 739利用VBS脚本让qq永远在线 2011年06月07日 让 ... -
vbs脚本实例
2012-01-19 13:28 608vbs脚本实例 2011年02月28日 rem 结束QQ ... -
ARM经典100问
2012-01-17 03:17 830ARM经典100问 2011年03月13日 第1章 体系 ... -
2010-07-09 22:03:18 计算机报错大全
2012-01-17 03:17 16672010-07-09 22:03:18 计算 ... -
电脑故障3000实例排查大全! 计算机报错大全
2012-01-17 03:17 5953电脑故障3000实例排查大 ... -
接上一篇
2012-01-17 03:17 752接上一篇 2011年04月25日 第 2 章 路由器基 ... -
点名。。。。。。。
2012-01-16 01:51 833点名。。。。。。。 4小时前 ★我的大名:郑渌 ★是 ... -
胡思乱想。。
2012-01-16 01:51 573胡思乱想。。 4小时前 我可不喜欢外国人 有思维障碍 交 ... -
大学往事 第五章 计算机班的女生
2012-01-16 01:51 589大学往事 第五章 计算机班的女生 2012年01月04日 ... -
中国各地人的长相特征
2012-01-16 01:51 1947中国各地人的长相特征 ... -
东北民众的地方语言
2012-01-16 01:51 701东北民众的地方语言 20 ... -
监听HTTP会话
2012-01-11 01:45 802监听HTTP会话 2011年09月0 ... -
注意异常丢失的情况-仰望者-iteye技术网站
2012-01-11 01:44 597注意异常丢失的情况-仰望者-iteye技术网站 2011年0 ...
相关推荐
WSAAsyncSelect基于Windows消息机制异步I/O模型,为特定网络事件指定系统通知信息.
WSAAsyncSelect 的demo
wsaasyncselect应用的源码例子,为大家网络编程提供思路!!
WSAAsyncselect 模型中,服务器与客户端消息的收发_vs2010 C++ Windows网络编程 服务器与客户端消息的收发 详细: http://blog.csdn.net/yulinxx/article/details/27700569
WSAAsyncSelect实现简单聊天工具——包含客户端和服务器端
WSAAsyncSelect客户端 实现客户端与服务器的连接通信。 希望大家批评指教
WSAAsyncSelect客户端例子,适合初学者
基于WSAAsyncSelect非阻塞通信程序设计
socket I/O WSAAsyncSelect模型示例源码。visual studio工程。
wsaasyncselect模型PPT 详解 很全面很详尽
c++Socket WSAAsyncSelect模型的简单示例。Windows会把网络事件以消息的形势通知应用程序,所以服务端必须先新建一个对话框,然后添加自定义消息。
使用VS2005的C++编写,将SOCKET异步传输(WSAAsyncSelect)的接收端做成了DLL库的形式,并且配给了一个实例化的程序,里面的注释比较详细,希望对新手有用。
WSAAsyncSelect (Client)
TCP/IP WsaAsyncSelect异步选择模型
基于WSAAsyncSelect异步操作TCP socket服务器 FD_READ 应用程序想要接收有关是否可读的通知,以便读入数据 FD_WRITE 应用程序想要接收有关是否可写的通知,以便写入数据 FD_OOB 应用程序想接收是否有带外(OOB)...
WSAASYNCSELECT模型-概述,Winsock I/O模型基础,这是套接字编程的必须学习的知识哦
vc socket 编程中异步类,为防止通信的堵塞,WSAAsyncSelect()
测试 WSAAsyncSelect 的使用
支持多个客户端和服务端通信,在vs2017编译通过
WsaAsyncSelect异步选择模型 DEMO