- 论坛徽章:
- 0
|
原帖由 peimichael 于 2009-6-1 13:59 发表 ![]()
我记得keepalive option似乎不能设置时间,只是打开关闭keep alive选项。
设置时间是在另外的地方(好像是sysctl,或者/proc下面),而且这个时间是一个系统只有一个,一旦改变所有程序的keepalive检测时间 ...
#include <netinet/tcp.h>//SOL_TCP, TCP_KEEPIDLE 参数的头文件
int keepAlive = 1; // 开启keepalive属性
int keepIdle = 180; // 如该连接在180秒内没有任何数据往来,则进行探测
int keepInterval = 5; // 探测时发包的时间间隔为5 秒
int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.
if((SOCKET = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf("**CreateSocket: error code = %d,error string = %s \n", errno, strerror(errno));
printf("**CreateSocket: create Socket failed !\n");
return -1;
}
if(setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, &m, sizeof(int)) != 0)
{
printf("**CreateSocket: error code = %d,error string = %s \n", errno, strerror(errno));
return -1;
}
if(setsockopt(SOCKET, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(struct timeval)) != 0)
{
printf("**CreateSocket: error code = %d,error string = %s \n", errno, strerror(errno));
return -1;
}
//SET KEEPALIVE ATTRIBUTE
if(setsockopt(SOCKET, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive)) != 0)
{
printf("**BindSocket: error code = %d,error string = %s \n", errno, strerror(errno));
return -1;
}
if(setsockopt(SOCKET, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle)) != 0)
{
printf("**BindSocket: error code = %d,error string = %s \n", errno, strerror(errno));
return -1;
}
if(setsockopt(SOCKET, SOL_TCP, TCP_KEEPINTVL, (void *)&keepInterval, sizeof(keepInterval)) != 0)
{
printf("**BindSocket: error code = %d,error string = %s \n", errno, strerror(errno));
return -1;
}
if(setsockopt(SOCKET, SOL_TCP, TCP_KEEPCNT, (void *)&keepCount, sizeof(keepCount)) != 0)
{
printf("**BindSocket: error code = %d,error string = %s \n", errno, strerror(errno));
return -1;
}
[ 本帖最后由 learntolinux 于 2009-6-1 17:23 编辑 ] |
|