在CC3200SDK_1.2.0里面的库文件中提供了使能或者禁能socket 设置keepalive的功能,但是没有提供根据需要设置TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT这三个参数的功能。我就借鉴Linux下面对于相似功能的设置,程序如下:
int32_t setKeepAlive(int32_t fd)
{
SlSockKeepalive_t enableOption;
enableOption.KeepaliveEnabled = 1;
int32_t keepIdle = 20;
int32_t keepInterval = 5;
int32_t keepCount = 3;
if(fd < 1)
return _ERROR;
else
{
if(sl_SetSockOpt(fd,SOL_SOCKET,SO_KEEPALIVE, &enableOption, sizeof(enableOption)) < 0)
{
return SOCKET_OPT_ERROR;
}
if( sl_SetSockOpt(fd, SL_IPPROTO_TCP, TCP_KEEPIDLE, &keepIdle, sizeof(keepIdle)) < 0)
return SOCKET_OPT_ERROR;
if( sl_SetSockOpt(fd, SL_IPPROTO_TCP, TCP_KEEPINTVL, &keepInterval, sizeof(keepInterval)) < 0)
return SOCKET_OPT_ERROR;
if( sl_SetSockOpt(fd, SL_IPPROTO_TCP, TCP_KEEPCNT, &keepCount, sizeof(keepCount)) < 0)
return SOCKET_OPT_ERROR;
return _OK;
}
}
程序执行完第2个sl_SetSockOpt函数的时候就返回错误,退出了,这意味着自己的野路子行不通了(这段代码应该是没有问题的,因为我在linux上面测试过的)。但是我之前看到过有人用CC3200芯片实现了keepalive机制的,所以想问有没有人知道怎么弄的?