我正在尝试将一些代码移植到 OSX - 似乎setsockopt
与 Linux 有一些不同。到目前为止,我发现并纠正的是使用 TCP_KEEPALIVE 而不是 TCP_KEEPIDLE。
OSX 的 TCP_USER_TIMEOUT 等价于什么?
使用 TCP_USER_TIMEOUT 编译失败并打印undeclared identifier
错误
我正在尝试将一些代码移植到 OSX - 似乎setsockopt
与 Linux 有一些不同。到目前为止,我发现并纠正的是使用 TCP_KEEPALIVE 而不是 TCP_KEEPIDLE。
OSX 的 TCP_USER_TIMEOUT 等价于什么?
使用 TCP_USER_TIMEOUT 编译失败并打印undeclared identifier
错误
我在 tcp.h 中找到了一个名为“TCP_CONNECTIONTIMEOUT”的宏。我用它来替换 Mac 上的 TCP_USER_TIMEOUT。它运作良好。你可以试试。
另一个可能的选项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
:
TCP_USER_TIMEOUT
是手动设置的(好像这段代码已经过时了);TCP_RXT_CONNDROPTIME
被使用;这个提交可能是一个线索,但我自己没有测试过。我只是希望这些信息对某人有所帮助。
Linux man和BSD man中的检查TCP_USER_TIMEOUT
和TCP_CONNECTIONTIMEOUT
描述- 它们似乎不太相似。