C-如何将TCP设置为VXWorks中特定套接字FD(不是系统宽)的TCP保持空间间隔



我在应用程序中创建了一个TCP套接字,并为此套接字启用了keepAlive。我可以看到,在IPTCP的系统变量中,即30秒。

插座创建:

  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 %dn",
                  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 %dn",
                  sockFD, SOL_SOCKET, SO_KEEPALIVE,
                  (char*) &optVal, sizeof(optVal), errnum );
  }

上面的两个setSockopt都返回了不支持操作的相同错误状态。(45,ip_errno_eopnotsupp(

在这里,我想将TCP保持活跃的间隔为5秒。

我希望将特定套接字FD的TCP保持活跃间隔。

编辑:这个问题不是如何在VXWORKS中设置Induvidual插座的keepalive选项的重复这个问题没有我的答案。请检查。第一个答案是我在这里问的相同的问题,在第二个答案中,链接不起作用。

我想您的VXWorks版本小于6.8。因为此选项(IP_TCP_KEEPINTVL以及TCP_KEECIDLE,TCP_KEEPCNT(不受SetSockopt的vxWorks版本的支持。据我所知,没有办法为以前发行版的特定套接字FD单独设置此选项。

我认为问题是将参数输入到socketopt。而不是使用(char*)5,您需要写出以下内容:

int nOpt=5;
(char*)&nOpt

最新更新