在使用WSAAsyncSelect中的搜集到的一些资料以及发现的一些问题
来源:互联网 发布:淘宝店访客量怎么提高 编辑:程序博客网 时间:2024/06/08 01:16
1. WSAEWOULDBLOCK 错误说明
在非锁定套接字上
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/96079.html
- 在使用WSAAsyncSelect中的搜集到的一些资料以及发现的一些问题
- 在使用AndroidSwipeLayout发现的一些问题
- 搜集一些git的资料
- 一些网上搜集的Qtopia的资料
- 搜集的一些关于MQTT的资料
- 搜集到一些升级到XCode 8 的问题
- 搜集的一些 迅驰处理器资料
- typedef struct的一些资料(搜集)
- iOS开发搜集的一些资料
- 关于git的一些资料搜集
- 使用Report Service发现的一些问题
- 使用vc发现的一些问题记录
- 使用JAVA发现的一些小问题
- 从协议网上搜集的SMTP协议的一些资料以及命令
- transition的一些问题发现
- CListCtrl滚动条的一些问题搜集
- java中一些小问题的搜集
- 使用OpenGL搜集的问题资料
- Centos 5.5 Nginx+php+mysql成功安装案例
- 如何在类中使用Response?
- HTTP cache
- JVM加载类中各成员的顺序
- struts2 s:select 标签
- 在使用WSAAsyncSelect中的搜集到的一些资料以及发现的一些问题
- JavaScript创建对象的语法
- Linux 下的几个常用操作
- Linux的高级网络设置
- CDialogBar类使用方法
- ubuntu安装apache+mysql+php和perl DBI
- Wemen and men
- 日期輸出格式轉換
- windbg,in win7 ,donot output news,by default