Android Ndk中缺少SO_KEEPINTVL或SO_KEEPCNT定义(用于TCP KeepAlive)

Missing SO_KEEPINTVL or SO_KEEPCNT defines in Android Ndk (for TCP KeepAlive)

本文关键字:SO 定义 用于 KeepAlive TCP KEEPCNT KEEPINTVL Ndk Android      更新时间:2023-10-16

我正在尝试设置TCP Keep Alive Socket选项并使用NDK调整其一些值,在这一点上,我认为NDK版本是无关紧要的。

相关代码是c++,从类中的方法调用,如下所示:

// Assume the socket handle is valid and was created with socket()
// Enable TCP Keep Alive
int nOptVal = 1;
setsockopt(hSocket, SOL_SOCKET, SO_KEEPALIVE, reinterpret_cast<char*>(&nOptVal), sizeof(nOptVal));
// Every 15 secs.
nOptVal = 15;
setsockopt(hSocket, SOL_TCP, SO_KEEPINTVL, reinterpret_cast<char*>(&nOptVal), sizeof(nOptVal));
// Send a single probe
nOptVal = 1;
setsockopt(hSocket, SOL_TCP, SO_KEEPCNT, reinterpret_cast<char*>(&nOptVal), sizeof(nOptVal));

当我尝试编译上面的代码时,SO_KEEPINTVLSO_KEEPCNT宏找不到,我似乎无法在NDK的包含文件中找到它们的定义。

有人做过这样的工作吗?

最后一点,我不能从java代码中做到这一点,因为需要在java代码正在使用的库中的套接字上设置选项。

我看了SO,发现了这个问题,它解释了如何在Java中做到这一点,所以我想这应该是可能的。

谢谢你的帮助。

综上所述,正确的宏名是TCP_KEEPINTVLTCP_KEEPCNT。它们在linux/tcp.h文件中定义。