SPB*_*SPB 0 c++ sockets windows
我有一个win7应用程序,我在TCP连接上发送数据b\w 2客户端.在测试时我发现WSAEWOULDBLOCK我的套接字上经常出错.为了解决这个错误,我在它周围放了一个while循环.
do
{
size_t value = ::send(); /*with proper arguments*/
}while(GetLastError() == 10035);
Run Code Online (Sandbox Code Playgroud)
所以,如果我得到error 10035我将重新发送数据.
但现在我看到这个while循环有时无限运行,我的应用程序进入了一种死锁状态.我尝试增加套接字的大小但仍然没有用.
如果有人知道如何解决WSAEWOULDBLOCK错误,请告诉我.
WSAEWOULDBLOCK实际上并不是一个错误,只是告诉您发送缓冲区已满.如果您使网络饱和或者另一方根本不确认收到的数据,则会发生这种情况.看一下select()函数,它允许您等到缓冲区空间可用或发生超时.还有一种方法可以将win32事件绑定到流,然后允许它与WaitForMultipleObjects一起使用,以防您想要提前中止等待.
BTW:我最初想反对你使用术语"死锁",但这也是可能发生的事情:如果你在收到下一个请求之前等待发送一些响应,而另一方想要发送下一个请求请求而不是收到您的回复,您的应用程序实际上已陷入僵局.使用select(),您可以确定是否可以发送数据,接收数据或连接失败,这使您可以正确处理这些情况以及何时发生.
注意:我还假设您的代码实际上不是对socket()的调用,而是对send/recv的调用.
| 归档时间: |
|
| 查看次数: |
18297 次 |
| 最近记录: |