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

问题描述 投票:-1回答:1

我有一个TCP连接活动,使用TCP_KEEPALIVE参数创建套接字。

现在,

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

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

在这样做的时候,我观察到我的程序停止了一段时间后我停止在socket上接收数据:socketId。

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

sockets c++11 tcp
1个回答
0
投票

不可能说,因为你的程序写得不正确。

如果n > 0,你收到了n字节的数据,你可以处理它。

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

如果n == -1,有一个错误,你应该通过errnostrerror()perror()打印或记录它,然后如上所述关闭套接字。

© www.soinside.com 2019 - 2024. All rights reserved.