找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: qq496683952

ACE中keepalive的疑问

  [复制链接]
发表于 2012-5-3 17:29:13 | 显示全部楼层
有些小区别。

////KeepAlive实现  
//下面代码要求有ACE,如果没有包含ACE,则请把用到的ACE函数改成linux相应的接口  
int keepAlive = 1;//设定KeepAlive  
int keepIdle = 5;//开始首次KeepAlive探测前的TCP空闭时间  
int keepInterval = 5;//两次KeepAlive探测间的时间间隔  
int keepCount = 3;//判定断开前的KeepAlive探测次数  
if(setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == -1)  
{  
    ACE_DEBUG ((LM_INFO,  
    ACE_TEXT ("(%P|%t) setsockopt SO_KEEPALIVE error!\n")));  
}  
if(setsockopt(s,SOL_TCP,TCP_KEEPIDLE,(void *)&keepIdle,sizeof(keepIdle)) == -1)  
{  
    ACE_DEBUG ((LM_INFO,  
    ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPIDLE error!\n")));  
}  
if(setsockopt(s,SOL_TCP,TCP_KEEPINTVL,(void *)&keepInterval,sizeof(keepInterval)) == -1)  
{  
    ACE_DEBUG ((LM_INFO,  
    ACE_TEXT ("(%P|%t) setsockopt TCP_KEEPINTVL error!\n")));  
}  
if(setsockopt(s,SOL_TCP,TCP_KEEPCNT,(void *)&keepCount,sizeof(keepCount)) == -1)  
{  
    ACE_DEBUG ((LM_INFO,  
    ACE_TEX
发表于 2012-5-3 17:49:53 | 显示全部楼层
自己写要不了多少代码量,如果延时厉害或是假连接,查起原因来也方便些
 楼主| 发表于 2012-5-4 11:23:23 | 显示全部楼层
sevencat 发表于 2012-5-3 17:29
有些小区别。

////KeepAlive实现  

还是谢谢你,虽然这个是度娘能问到的
不过我的问题没有解答
 楼主| 发表于 2012-5-4 11:23:53 | 显示全部楼层
wesom 发表于 2012-5-3 17:49
自己写要不了多少代码量,如果延时厉害或是假连接,查起原因来也方便些

还是自己写心跳包算了.
可控性强点.
发表于 2012-6-1 16:14:36 | 显示全部楼层
可以使用,设置这个后,但网络出问题,得到的回调或通知,与  正常情况下,对端close掉,你这一侧表现的形式是一样的。
我没有说什么函数会被调用,是因为 有多种连接的实现方式。


windows和linux是一样的。只是linux的时间设置时要注意,好像不能小于1s,windows下可以随便说。

自己在应用层实现keepalive,当然是可以的。但是好多人说这话 是站着说话不腰疼,真正自己实现起来还是有一定的工作量。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 16:11 , Processed in 0.014427 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表