我应该如何干净利落地跳出recv循环
How should I cleanly break out of a recv loop?
我在循环中使用recv
函数来接收网络数据,但假设我想在循环中停止接收数据。我可以直接中断循环,但这似乎不是一个非常干净的方式来停止接收数据。
那么有没有办法干净地停止接收数据,或者只是打破循环好吗?这是HTTP GET/POST请求。
这里是我使用的简化:
do {
nDataLen = recv(mySocket, data, BUFFSIZE, 0);
if (nDataLen > 0)
{
/* Process Data */
// I'd like to break out of the loop
// if something is found when processing the data
// But, I want to do this cleanly.
}
} while (nDataLen != 0);
跳出recv循环不会关闭连接。所发生的只是停止调用recv,因此停止从套接字读取数据。来自对等端的数据仍将到达您的套接字。如果你想干净地关闭,那么调用socket文件描述符上的close
。
跳出循环是停止调用recv
的一种方式。另一种方法是包含一个布尔值should_stop
,并在循环条件中检查它。但是,您应该接收套接字中剩余的内容并正确关闭它。
如果您不需要套接字,请关闭套接字并跳出循环
相关文章:
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在 for 循环中处理复杂的发送 recv 消息
- Winsock recv 循环无法正常工作
- Recv()进入无限循环
- 我应该如何干净利落地跳出recv循环