如何在 Linux C 编程中使用带有 KEEP_ALIVE 的 setsockopt 和 getsockopt 来确定断开的 tcp/ip 连接?

Fea*_*nix 3 c linux tcp

我将如何在Linux C 编程中使用setsockopt 和getsockopt 来确定断开的tcp/ip 连接?

jxh*_*jxh 6

TCP 手册页

要设置或获取 TCP 套接字选项,请调用getsockopt(2)读取或setsockopt(2)写入选项并将选项级别参数设置为IPPROTO_TCP

以下是相关选项:

TCP_KEEPCNT(自 Linux 2.4 起)

TCP 在断开连接之前应发送的保活探测的最大数量。此选项不应在可移植的代码中使用。

TCP_KEEPIDLE(自 Linux 2.4 起)

如果已在此套接字上设置了套接字选项 SO_KEEPALIVE,则在 TCP 开始发送 keepalive 探测之前连接需要保持空闲的时间(以秒为单位)。此选项不应在可移植的代码中使用。

TCP_KEEPINTVL(自 Linux 2.4 起)

各个保活探测之​​间的时间(以秒为单位)。此选项不应在可移植的代码中使用。

例子:

int keepcnt = 5;
int keepidle = 30;
int keepintvl = 120;

setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &keepcnt, sizeof(int));
setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &keepidle, sizeof(int));
setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(int));
Run Code Online (Sandbox Code Playgroud)