4

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);
4

3 回答 3

3

打破 recv 循环不会关闭连接。所发生的一切是您停止调用 recv 并因此停止从套接字读取数据。来自对等方的数据仍将到达您的套接字。如果您想彻底关闭,请调用close套接字文件描述符。

于 2011-09-30T04:48:36.030 回答
0

跳出循环是停止调用的一种方式recv。另一种方法是should_stop在循环条件中包含一个布尔值并检查它。但是,您应该收到套接字中剩余的任何内容并正确关闭它。

于 2011-09-30T04:39:25.657 回答
0

如果您不需要套接字,请关闭套接字并跳出循环。

于 2011-09-30T04:42:54.417 回答