【问题标题】:What is the setsockopt option name of TCP_USER_TIMEOUT on OSXOSX 上 TCP_USER_TIMEOUT 的 setsockopt 选项名称是什么
【发布时间】:2014-03-19 18:44:24
【问题描述】:

我正在尝试将一些代码移植到 OSX - setsockopt 似乎与 Linux 有一些不同。到目前为止,我发现并纠正的是使用 TCP_KEEPALIVE 而不是 TCP_KEEPIDLE。

对于 OSX,TCP_USER_TIMEOUT 是什么?

使用 TCP_USER_TIMEOUT 编译失败并打印undeclared identifier 错误

【问题讨论】:

  • 抛出异常。编译器错误会打印在控制台上。它们不是异常,也不会被抛出。
  • 下次编辑帖子并附上解释。
  • 这会告诉你,如果你看的话,但它不会告诉其他人。这是一个常见的错误陈述。

标签: c++ macos sockets tcp setsockopt


【解决方案1】:

我在 tcp.h 中找到了一个名为“TCP_CONNECTIONTIMEOUT”的宏。我用它来替换 Mac 上的 TCP_USER_TIMEOUT。它运作良好。你可以试试看。

【讨论】:

    【解决方案2】:

    另一个可能的选项是来自同一标题的TCP_RXT_CONNDROPTIME:

    #define TCP_RXT_CONNDROPTIME    0x80    /* time after which tcp retransmissions will be 
                                             * stopped and the connection will be dropped
                                             */
    

    我发现这个奇怪的commit 为TCP_USER_TIMEOUT 提供了三个实现:

    • Linux:TCP_USER_TIMEOUT 是手动设置的(好像这段代码已经过时了);
    • 达尔文:使用TCP_RXT_CONNDROPTIME;
    • Win:未提供实现。

    这个提交可能是一个线索,但我自己没有测试过。我只是希望这些信息对某人有所帮助。

    检查Linux man 和BSD man 中的TCP_USER_TIMEOUT 和TCP_CONNECTIONTIMEOUT 描述 - 它们似乎不太相似。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 2019-05-29
      • 2021-12-23
      • 2012-02-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2016-08-13
      • 2010-09-19
      相关资源
      最近更新 更多