1

有没有办法在 vxworks 中为单个套接字描述符设置 keepalive?我在一些文档中读到,setsockopt 函数中的“SOL_TCP”选项会在 linux 中起到这样的作用。VxWorks 中是否也提供此类功能?如果是这样,请提供相同的相关详细信息,例如我们需要包含哪些包含文件以及如何使用此类选项等。

4

2 回答 2

1

从 VxWorks“库参考”手册(可以下载):

流式套接字选项

以下部分讨论可用于流 (TCP) 套接字的套接字选项。

SO_KEEPALIVE -- 检测死连接

指定 SO_KEEPALIVE 选项以使传输协议 (TCP) 启动计时器以检测死连接:

 setsockopt (sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof (optval));

这可以防止应用程序挂在无效连接上。此选项的 optval 值是整数(类型 int),1(打开)或 0(关闭)。通过传输由计时器触发的零长度 TCP 段来验证连接的完整性,以强制对等节点做出响应。如果对等点在重复传输KEEPALIVE段后没有响应,则断开连接,回收所有协议数据结构,并且在连接上休眠的进程被唤醒并出现ETIMEDOUT错误。

ETIMEDOUT超时可以通过两种方式发生。如果连接尚未建立,则KEEPALIVE计时器在TCPTV_KEEP_INIT空闲后到期。如果建立了连接,当TCPTV_KEEP_IDLE没有流量时,KEEPALIVE 计时器就会启动。如果在间隔TCPTV_KEEPINTVL发送KEEPALIVETCPTV_KEEPCNT次后没有收到来自对等方的响应,则 TCP 假定连接无效。参数TCPTV_KEEP_INITTCPTV_KEEP_IDLETCPTV_KEEPCNTTCPTV_KEEPINTVL在文件 target/h/net/tcp_timer.h 中定义。

于 2011-01-07T15:28:25.653 回答
0

在 vxworks 6.8 版本之后,setsockopt 支持的 IP_TCP_KEEPINTVL 以及 TCP_KEEPIDLE、TCP_KEEPCNT 选项。在以前的 vxworks 版本中,您可以全局更改这些值,并且创建的所有套接字都会生效。下面的问题是如何完成的答案。

如何在 VxWorks 中为特定套接字 fd(非系统范围)设置 TCP 保持活动间隔?

于 2019-08-29T07:43:27.287 回答