【问题标题】:How to set keepalive option for induvidual socket in VxWorks如何在 VxWorks 中为单个套接字设置 keepalive 选项
【发布时间】:2019-08-29 15:59:26
【问题描述】:

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

【问题讨论】:

    标签: vxworks sockets


    【解决方案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.

    【讨论】:

    • 是否可以为单个套接字设置定时器值(KEEP ALIVE TIMER)?请分享 vxWorks“库参考”手册链接。
    【解决方案2】:

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

    How to set TCP keep alive interval for a specific socket fd (Not system wide) in VxWorks?

    【讨论】:

      猜你喜欢
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2018-08-09
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多