OSX上的TCP_USER_TIMEOUT的setsockopt选项名称是什么

时间:2014-03-19 18:44:25

标签: c++ macos sockets tcp setsockopt

我正在尝试将一些代码移植到OSX上 - 看来setsockopt与Linux有一些区别。到目前为止我找到并纠正的是使用TCP_KEEPALIVE而不是TCP_KEEPIDLE。

OSX的TCP_USER_TIMEOUT相当于什么?

使用TCP_USER_TIMEOUT无法编译并打印undeclared identifier错误

2 个答案:

答案 0 :(得分:1)

另一个可能的选项是来自同一标头的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 manBSD man中的TCP_USER_TIMEOUTTCP_CONNECTIONTIMEOUT描述-它们似乎不太相似。

答案 1 :(得分:0)

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