我有一个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。
我的程序没有创建任何核心转储文件,没有崩溃的迹象或任何东西。那么有人可以解释为什么程序/过程停止了吗?
不可能说,因为你的程序写得不正确。
如果n > 0
,你收到了n
字节的数据,你可以处理它。
如果n == 0
,对等体已断开连接:您必须关闭套接字并停止阅读。
如果n == -1
,有一个错误,你应该通过errno
,strerror()
或perror()
打印或记录它,然后如上所述关闭套接字。