我在一个应用程序中创建了一个 TCP 套接字,并为此套接字启用了 KEEPALIVE。我可以看到keepalive数据包以我已经在iptcp的系统变量中设置的keepalive间隔的频率出现,即30secs。
套接字创建:
if( ( sockFD = socket( AF_INET, SOCK_STREAM, 0 ) ) == ERROR )
{
DS_SWX_ERROR( "socket(%d,%d,%d) failed.", AF_INET, SOCK_STREAM, 0 );
return;
}
VxWorks TCP 系统变量:
[vxWorks *]# sysvar list iptcp
System variables:
iptcp.KeepCnt=3
iptcp.KeepIdle=60
iptcp.KeepIntvl=30
如上所述,根据系统变量,它工作正常。在连续 3 个数据包丢失后,我的连接关闭后,我会以 30 秒的间隔收到保持活动的数据包。一切都作为系统变量工作正常。但是这个 TCP 系统变量配置对于所有启用了保持活动的套接字都是相同的。
我只想为我创建的套接字设置此保持活动间隔,而不是为整个系统设置。
我已经尝试使用 setsockopt 设置保持活动间隔。
if( (setsockopt( sockFD, SOL_SOCKET, IP_TCP_KEEPINTVL,
(char *)5, sizeof(int) )) == ERROR )
{
DS_SWX_ERROR( "setsockopt(%d,%d,%d,0x%x,%d) failed, Error is %d\n",
sockFD, SOL_SOCKET, SO_KEEPALIVE,
(char*) &optVal, sizeof(optVal), errnum );
}
和
if( (setsockopt( sockFD, IP_IPPROTO_IP, IP_TCP_KEEPINTVL,
(char *)5, sizeof(int) )) == ERROR )
{
DS_SWX_ERROR( "setsockopt(%d,%d,%d,0x%x,%d) failed, Error is %d\n",
sockFD, SOL_SOCKET, SO_KEEPALIVE,
(char*) &optVal, sizeof(optVal), errnum );
}
上述 setsockopt 都返回相同的错误状态,即不支持操作。(45,IP_ERRNO_EOPNOTSUPP)
在这里,我想将 TCP KEEP ALIVE INTERVAL 设置为 5 秒。
我希望为特定的套接字 fd 设置 tcp 保持活动间隔。
编辑:这个问题不是How to set keepalive option for induvidual socket in VxWorks的副本 那个问题没有我的答案。请检查。第一个答案是我在这里问的同一个问题,在第二个答案中链接不起作用。