我正在尝试将一些代码移植到OSX上 - 看来setsockopt
与Linux有一些区别。到目前为止我找到并纠正的是使用TCP_KEEPALIVE而不是TCP_KEEPIDLE。
OSX的TCP_USER_TIMEOUT相当于什么?
使用TCP_USER_TIMEOUT无法编译并打印undeclared identifier
错误
答案 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
提供了三种实现:
TCP_USER_TIMEOUT
是手动设置的(似乎这段代码已经过时了); TCP_RXT_CONNDROPTIME
; 此提交可能是一个线索,但我自己尚未对其进行测试。我只是希望这些信息对某人有所帮助。
检查Linux man和BSD man中的TCP_USER_TIMEOUT
和TCP_CONNECTIONTIMEOUT
描述-它们似乎不太相似。
答案 1 :(得分:0)
我在tcp.h中找到了一个名为“ TCP_CONNECTIONTIMEOUT”的宏。我用它代替Mac上的TCP_USER_TIMEOUT。它运作良好。您可以尝试一下。