我应该如何干净利落地跳出recv循环

How should I cleanly break out of a recv loop?

本文关键字:recv 循环 干净利落 我应该      更新时间:2023-10-16

我在循环中使用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,并在循环条件中检查它。但是,您应该接收套接字中剩余的内容并正确关闭它。

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