在使用WSAAsyncSelect中的搜集到的一些资料以及发现的一些问题

简介: 一般来说,第一种场景是不太多发生的,而是第二种情况会很多,有可能是网络不好也有可能是服务器处理不及很繁忙。MSDN里面显示,在此时,如果发送缓冲空出来,系统会发送一个FD_WRITE消息给发送者,这时候再把发送失败的包重新发送即可。
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或许也是可行的办法。
    不过根据上面的资料显示,触发条件总共有三种,收到此消息的时候可能不能辨别究竟是哪一个,其实这个很好办,只要设置一个发送队列,如果发送队列不为空,那么发送之,否则就重新进行连接或者重新进行接受。

目录
相关文章
|
1月前
|
网络协议 搜索推荐 Linux
信息搜集工具:Maltego
信息搜集工具:Maltego
|
2月前
|
存储 索引
打造个人知识管理系统:从信息收集到知识应用
【9月更文挑战第10天】在信息爆炸的时代,如何高效地管理和利用信息成为现代人面临的一大挑战。本文将介绍如何构建一个个人知识管理系统,包括信息收集、整理、存储和检索的全过程。我们将探讨使用数字工具进行信息管理的方法,并分享一些实用的技巧和策略。无论你是学生、职场人士还是终身学习者,这些方法都将帮助你更好地管理知识和提升学习效率。
61 10
|
4月前
|
安全 Linux 应用服务中间件
【信息收集】 网站信息收集
该文档提供了一套方法来检测和识别网络上运行的操作系统、网站服务、容器类型以及WAF(Web应用防火墙)
43 0
|
6月前
|
数据可视化 数据挖掘 Linux
想过如何把信息收集可视化么?
想过如何把信息收集可视化么?
34 0
收集 macwk.com 的替代网站
macwk.com 在 2022-10-05 关站,域名停止解析,已经打不开了。翻了很多资料,收集了几个网站作为替代,大家有需要可以试试,如果有更好的麻烦告诉我哈哈!
103 0
|
监控 安全 Linux
ARL灯塔信息搜集系统安装教程
ARL灯塔信息搜集系统安装教程
2055 0
|
Python
一款好用的fofa信息搜集脚本
一款好用的fofa信息搜集脚本
164 0
|
域名解析 安全 搜索推荐
安全工具-e7信息收集
安全工具-e7信息收集
安全工具-e7信息收集
|
Oracle 关系型数据库 数据库
如何收集systemdump?如何收集hanganalyze?
如何收集systemdump?如何收集hanganalyze?
113 0