【问题标题】:When socket timeout happens? (Unix)当套接字超时发生时? (Unix)
【发布时间】:2017-01-31 15:45:21
【问题描述】:

当我连接到一个名为 socket 的 Unix 时,在什么情况下我可能会收到 ETIMEDOUT?

如果服务器在 N 秒内不接受()时发生这种情况,那么 Linux 上的典型 N 是多少?

【问题讨论】:

  • 我怀疑你是否会在accept() 上看到这个。你会在send()recv() 和朋友上看到它。

标签: linux sockets unix timeout


【解决方案1】:

如果服务器的操作系统在N 秒内不接受连接,就会发生这种情况。调用accept() 的服务器应用程序通常不相关,因为无论应用程序是否调用accept(),操作系统都会自动执行3 次握手; TCP 堆栈将挂起的连接排队,直到应用程序执行此操作(达到积压限制)。

因此,通常只有在服务器物理关闭或网络出现通信错误时才会发生此超时。

我认为 Linux 上的默认值是 20 秒。

【讨论】:

  • 你真的会在accept() 上看到这个吗? TCP 肯定会默默地丢弃不完整的连接吗?
  • 在堆栈完成 3 次握手之前,accept() 无法使用连接。
猜你喜欢
  • 2016-04-18
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2011-05-18
  • 2018-06-21
  • 1970-01-01
  • 2021-08-22
  • 2015-11-14
相关资源
最近更新 更多