TCP recv()函数在程序循环中的行为?

时间:2018-01-02 09:13:57

标签: sockets c++11 tcp

我有一个TCP连接处于活动状态,而套接字是使用TCP_KEEPALIVE参数创建的。

现在,

While(1)
{
   int n = ::recv(socketId,buff,BUF_SIZE,MSG_WAITALL);
   if ( n > 0)
   {
     // do something
   }
}  

现在让我们说,如果我在socketId上没有收到数据,那么说2-3分钟? 会发生什么 ?程序会一直在recv()吗?

在执行此操作时,我发现我的程序停止了一段时间后我停止接收套接字上的数据:socketId。

我的程序没有创建任何核心转储文件,没有崩溃或任何事情的迹象。 那么有人可以解释为什么程序/过程停止了吗?

1 个答案:

答案 0 :(得分:0)

无法说,因为你的程序写得不正确。

如果n > 0,您收到n个字节的数据,则可以对其进行处理。

如果n == 0,则对等方已断开连接:您必须关闭套接字并停止阅读。

如果n == -1出现错误,您应该通过errnostrerror()perror()进行打印或记录,然后关闭套接字上方。