IPPROTO_TCP 或 SOL_SOCKET
IPPROTO_TCP or SOL_SOCKET
我在 TCP 套接字上的对等点之间有一个简单的 P2P 连接。我的客户端和服务器都在 Linux 上 运行。我已经打开 TCP keep_alive functionality on my TCP sockets on both sides. I am using 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 连接。
SOL是socket_level的缩写,专为SO_*
选项而设计,例如SO_REUSEPORT
IPPROTO_*
是为特定网络协议的选项设计的,如IPPROTO_IP、IPPROTO_TCP
更多:
我在 TCP 套接字上的对等点之间有一个简单的 P2P 连接。我的客户端和服务器都在 Linux 上 运行。我已经打开 TCP keep_alive functionality on my TCP sockets on both sides. I am using 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 连接。
SOL是socket_level的缩写,专为SO_*
选项而设计,例如SO_REUSEPORT
IPPROTO_*
是为特定网络协议的选项设计的,如IPPROTO_IP、IPPROTO_TCP
更多: