【发布时间】:2011-11-28 04:37:13
【问题描述】:
我在循环中使用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,那并不意味着没有接收到数据。它仍然会进入某个系统缓冲区。
-
@VaughnCato 打破循环会有什么伤害吗?如果数据在某处的系统缓冲区中,它会在那里停留多长时间?
-
@Josh:不,那很好。它会一直留在那里,直到你使用另一个 recv() 或者你关闭套接字。
标签: c++ c networking recv