我应该如何彻底摆脱recv循环?

时间:2011-09-30 04:36:46

标签: c++ c networking recv

我在循环中使用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);

3 个答案:

答案 0 :(得分:3)

中断recv循环不会关闭连接。所有这一切都是你停止调用recv,因此停止从套接字读取数据。来自对等方的数据仍将到达您的套接字。如果要干净地关闭,请在套接字文件描述符上调用close

答案 1 :(得分:0)

打破循环是一种停止调用recv的方法。另一种方法是包含一个布尔值should_stop并在循环条件中检查它。但是,你应该收到插座中留下的任何内容并正确关闭它。

答案 2 :(得分:0)

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