gpt4 book ai didi

linux - IPPROTO_TCP 或 SOL_SOCKET

转载 作者:行者123 更新时间:2023-12-03 11:56:44 24 4
gpt4 key购买 nike

我在 TCP 套接字上的对等方之间有一个简单的 P2P 连接。我的客户端和服务器都在 Linux 上运行。我已开启TCP keep_alive functionality在我两边的 TCP 套接字上。我正在使用 boost::asio要连接,请在两侧的 tcp 套接字上读取写入数据。

tcp keep_alive 示例使用 IPPROTO_TCPSOL_SOCKET这令人困惑。以下是我在套接字上设置的属性。但我很困惑是否使用 IPPROTO_TCPSOL_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_REUSEPORTIPPROTO_*专为特定网络协议(protocol)的选项而设计,例如 IPPROTO_IP、IPPROTO_TCP

更多的:

  • https://www.gnu.org/software/libc/manual/html_node/Socket_002dLevel-Options.html#Socket_002dLevel-Options
  • https://www.gnu.org/software/guile/manual/html_node/Network-Sockets-and-Communication.html
  • https://linux.die.net/man/2/getsockopt
  • https://linux.die.net/man/7/tcp
  • 关于linux - IPPROTO_TCP 或 SOL_SOCKET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59047147/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com