套接字默认超时
Socket default timeout(s)
主题。奇怪的是,我无法在 Windows 或 POSIX.
的套接字参考文档中轻松找到它
为了问题的目的,我说的是影响套接字 API 调用的任何超时,即控制 API 调用之后的时间的任何值return 有一个错误。 所以,像 TIME_WAIT 这样的东西被排除了,因为它只影响系统状态而不是程序的控制流。这个问题的灵感来自 ,其中 OP 声称 accept
会永远等待 - 我不相信。
- AFAICS,有两个:for receive和for send,不仅影响
send
/recv
,而且影响所有涉及接收或发送的API , 比如 accept
.
更具体地说:
- 它是由某些规范强制执行的还是完全取决于 OS 供应商?
- major OSes1 的默认值是多少?至少,数量级。
- 如果在系统范围内可配置,它们存储在哪里(如果有很多可能性 - 来自内核's/stock 库的 POV)?
1例如Windows, Debian, Red Hat, FreeBSD, Mac OS X, Android.
如果您谈论的是 BSD 套接字 API 中的 API 操作或基于其构建或类似的系统,则接受、发送和接收默认超时是无限的。这是由 BSD 套接字 API 和 Winsock 强制要求的。大多数实现甚至不允许您更改发送超时。
主题。奇怪的是,我无法在 Windows 或 POSIX.
的套接字参考文档中轻松找到它为了问题的目的,我说的是影响套接字 API 调用的任何超时,即控制 API 调用之后的时间的任何值return 有一个错误。 所以,像 TIME_WAIT 这样的东西被排除了,因为它只影响系统状态而不是程序的控制流。这个问题的灵感来自 accept
会永远等待 - 我不相信。
- AFAICS,有两个:for receive和for send,不仅影响
send
/recv
,而且影响所有涉及接收或发送的API , 比如accept
.
更具体地说:
- 它是由某些规范强制执行的还是完全取决于 OS 供应商?
- major OSes1 的默认值是多少?至少,数量级。
- 如果在系统范围内可配置,它们存储在哪里(如果有很多可能性 - 来自内核's/stock 库的 POV)?
1例如Windows, Debian, Red Hat, FreeBSD, Mac OS X, Android.
如果您谈论的是 BSD 套接字 API 中的 API 操作或基于其构建或类似的系统,则接受、发送和接收默认超时是无限的。这是由 BSD 套接字 API 和 Winsock 强制要求的。大多数实现甚至不允许您更改发送超时。