我有一个TCP连接处于活动状态,而套接字是使用TCP_KEEPALIVE参数创建的。
现在,
While(1)
{
int n = ::recv(socketId,buff,BUF_SIZE,MSG_WAITALL);
if ( n > 0)
{
// do something
}
}
现在让我们说,如果我在socketId上没有收到数据,那么说2-3分钟? 会发生什么 ?程序会一直在recv()吗?
在执行此操作时,我发现我的程序停止了一段时间后我停止接收套接字上的数据:socketId。
我的程序没有创建任何核心转储文件,没有崩溃或任何事情的迹象。 那么有人可以解释为什么程序/过程停止了吗?
答案 0 :(得分:0)
无法说,因为你的程序写得不正确。
如果n > 0
,您收到n
个字节的数据,则可以对其进行处理。
如果n == 0
,则对等方已断开连接:您必须关闭套接字并停止阅读。
如果n == -1
出现错误,您应该通过errno
,strerror()
或perror()
进行打印或记录,然后关闭套接字上方。