【发布时间】:2017-01-31 15:45:21
【问题描述】:
当我连接到一个名为 socket 的 Unix 时,在什么情况下我可能会收到 ETIMEDOUT?
如果服务器在 N 秒内不接受()时发生这种情况,那么 Linux 上的典型 N 是多少?
【问题讨论】:
-
我怀疑你是否会在
accept()上看到这个。你会在send()或recv()和朋友上看到它。
标签: linux sockets unix timeout
当我连接到一个名为 socket 的 Unix 时,在什么情况下我可能会收到 ETIMEDOUT?
如果服务器在 N 秒内不接受()时发生这种情况,那么 Linux 上的典型 N 是多少?
【问题讨论】:
accept() 上看到这个。你会在send() 或recv() 和朋友上看到它。
标签: linux sockets unix timeout
如果服务器的操作系统在N 秒内不接受连接,就会发生这种情况。调用accept() 的服务器应用程序通常不相关,因为无论应用程序是否调用accept(),操作系统都会自动执行3 次握手; TCP 堆栈将挂起的连接排队,直到应用程序执行此操作(达到积压限制)。
因此,通常只有在服务器物理关闭或网络出现通信错误时才会发生此超时。
我认为 Linux 上的默认值是 20 秒。
【讨论】:
accept() 上看到这个吗? TCP 肯定会默默地丢弃不完整的连接吗?
accept() 无法使用连接。