我在 TCP 套接字上的对等方之间有一个简单的 P2P 连接。我的客户端和服务器都在Linux上运行。我已经在两边的 TCP 套接字上打开了TCP keep_alive 功能。我正在使用boost::asio来连接、读取两边我的 tcp 套接字上的写入数据。
tcp keep_alive示例使用IPPROTO_TCP
并且SOL_SOCKET
令人困惑。以下是我在套接字上设置的属性。但是我很困惑是使用IPPROTO_TCP
还是SOL_SOCKET
因为它们在两个平台上都编译得很好。
代码:
int on = 1;
setsockopt(socketNativeHandle, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(int)
int timeOut = 3; //seconds
setsockopt(socketNativeHandle, IPPROTO_TCP, TCP_KEEPIDLE, &timeOut, sizeof(int)
setsockopt(socketNativeHandle, IPPROTO_TCP, TCP_KEEPINTVL, &timeOut, sizeof(int))
int unackCount = 1;
setsockopt(socketNativeHandle, IPPROTO_TCP, TCP_KEEPCNT, &unackCount, sizeof(int))
或者
int on = 1;
setsockopt(socketNativeHandle, SOL_SOCKET, TCP_NODELAY, &on, sizeof(int)
int timeOut = 3; //seconds
setsockopt(socketNativeHandle, SOL_SOCKET, TCP_KEEPIDLE, &timeOut, sizeof(int)
setsockopt(socketNativeHandle, SOL_SOCKET, TCP_KEEPINTVL, &timeOut, sizeof(int))
int unackCount = 1;
setsockopt(socketNativeHandle, SOL_SOCKET, TCP_KEEPCNT, &unackCount, sizeof(int))
问题:
我SOL_SOCKET
应该双面使用还是应该IPPROTO_TCP
双面使用?有没有办法在运行时决定这个?请注意,我有非常简单的点对点 wifi 连接。