如何解决WSAE将阻止错误
how to resolve WSAEWOULDBLOCK error
我有一个win7应用程序,我正在TCP连接上发送数据b\w 2客户端。在测试时,我发现我的套接字经常出现WSAEWOULDBLOCK
错误。自解决此错误,我为例如在它周围放置了一个 while 循环。
do
{
size_t value = ::send(); /*with proper arguments*/
}while(GetLastError() == 10035);
因此,如果我得到error 10035
我将重新发送数据。
但是现在我看到这个while循环有时会无限运行,我的应用程序会进入某种死锁状态。我尝试增加插座的大小,但仍然没有用。
如果有人知道如何解决WSAEWOULDBLOCK
错误,请告诉我。
WSAEWILLBLOCK并不是一个真正的错误,而只是告诉你你的发送缓冲区已满。如果您使网络饱和,或者另一端根本不确认接收到的数据,则可能会发生这种情况。看看 select() 函数,它允许你等到缓冲区空间可用或发生超时。还有一种方法可以将 win32 事件绑定到流,然后允许将其与 WaitForMultipleObjects 一起使用,以防您想要提前中止等待。
顺便说一句:我最初想反对你使用术语"死锁",但这也是可能发生的事情:如果你在收到下一个请求之前等待发送一些响应,而另一方想要发送下一个请求而不是接收你的响应,你的应用程序实际上已经死锁了。使用 select(),您可以确定是否可以发送数据、接收数据或连接是否失败,这使您可以正确处理这些情况以及它们何时发生。
注意:我还假设您的代码并不是对socket()的真正调用,而是对发送/recv的调用。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决WSAE将阻止错误