Day 50 关于tcp 连接的一些问题,,,,,,

本文探讨了TCP连接中服务器如何通过recv()函数监测客户端状态,实现资源的有效管理和利用。当客户端异常断开,recv()返回负数,系统可及时释放资源;若客户端长时间未发送请求,recv()返回0,系统亦自动断开连接,避免资源浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

...

关于tcp 连接的一些问题,当客户端连接上服务器后,服务器会停止在recv()函数等待,此时会有一下几种情况:
(1)当客户端突然终止连接时,recv()函数会返回一个小于0的整数,int ret = recv(); ret 小于0,此时可以判断后
让子进程结束,避免浪费资源。
(2)当多个进程的套接字进程创建后,如果,连接端没有意外断开,一直连接着,但一直不给服务器发送请求。这时候
大概2分钟左右,系统就会自动去检查,服务器的连接函数。如果客户端没有在2分钟内给服务器发送请求,则服务器中的系统
就会读到recv()函数的返回值为0.然后系统就会自动断开此进程的客户端连接,避免客户端一直连着却不请求从而浪费资源。

/*
char buf[1024]= {0};
printf(“start %s\n”,buf);
ret = recv(conn,buf,1024,0);
printf(" is who %s\n",buf);
if(ret< 0)
{
//continue;
printf(“cli conn error \n”);
exit(1);
}
if(0 == ret)
{
printf(“ser break error\n”);
exit(1);
}
*/

//客户端连接后一直不请求,会出现如下结果

start
is who
ser break error
the cli number is 1 //此句表明还有一个子进程
child over
is who
ser break error
the cli number is 0 //此句表明没有子进程
child over

/*
if(0 == ret)
{
printf(“ser break error\n”);
exit(1);
}*/
如果将此段注释后,2分钟子进程还是会被,kill ,并且被自己调用的函数回收,
而且不打印执行 printf(“ser break error\n”);
则可以说明,不是因为浏览器发送了请求,却没有发送正文,recv()函数才 返回0 ,来使子进程退出的。
可以说明,避免资源浪费的机制是由系统维护来完成的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值