1

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

OSX 的 TCP_USER_TIMEOUT 等价于什么?

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

4

2 回答 2

3

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

于 2018-06-20T07:31:36.683 回答
1

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

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

我发现了这个奇怪的提交,其中提供了三种实现TCP_USER_TIMEOUT

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

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

Linux manBSD man中的检查TCP_USER_TIMEOUTTCP_CONNECTIONTIMEOUT描述- 它们似乎不太相似。

于 2020-10-14T16:59:35.690 回答