Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 套接字默认超时_Sockets_Language Agnostic_Timeout - Fatal编程技术网

Sockets 套接字默认超时

Sockets 套接字默认超时,sockets,language-agnostic,timeout,Sockets,Language Agnostic,Timeout,主语。奇怪的是,我在Windows或POSIX的套接字参考文档中找不到这个 出于这个问题的目的,我指的是影响套接字API调用的任何超时,即控制API调用返回错误的时间的任何值。因此,排除了类似time_WAIT的情况,因为它只影响系统状态,而不影响程序的控制流。这个问题的灵感来源于OP声称一个接受将永远等待的地方——我不相信这一点 ,有两种:for receive和for send,它们不仅影响send/recv,而且影响所有涉及接收或发送的API,如accept 更具体地说: 它是由某些

主语。奇怪的是,我在Windows或POSIX的套接字参考文档中找不到这个

出于这个问题的目的,我指的是影响套接字API调用的任何超时,即控制API调用返回错误的时间的任何值。因此,排除了类似time_WAIT的情况,因为它只影响系统状态,而不影响程序的控制流。这个问题的灵感来源于OP声称一个<代码>接受将永远等待的地方——我不相信这一点

  • ,有两种:for receive和for send,它们不仅影响
    send
    /
    recv
    ,而且影响所有涉及接收或发送的API,如
    accept
更具体地说:

  • 它是由某些规范强制执行的还是完全由操作系统供应商决定的
  • 主要操作系统1的默认值是什么?至少,数量级。
    • 如果系统范围是可配置的,那么它们存储在哪里(如果有很多可能性-从内核/股票库的POV)


1E.g。Windows、Debian、Red Hat、FreeBSD、Mac OS X、Android。

如果您谈论的是BSD Sockets API或其上构建的系统或类似系统中的API操作,则接受、发送和接收默认超时是无限的。这是由BSD套接字API和Winsock强制执行的。大多数实现甚至不允许您更改发送超时。

这些语句有任何参考链接吗?这怎么可能,所以插座一定要有,不是吗?如果我使用然后,
recv
也应该检测到连接断开。@ivan_pozdeev 1。我的参考资料是BSD Sockets手册页。2.内部TCP超时与此无关:您明确询问了不影响系统(实际上是连接)状态的事情,这就是我的回答。TCP超时会导致重试,并最终在内部重置。除非通过API设置内部TCP超时,否则读取时不会出现内部TCP超时
recv()
通过传递EconReset而不是通过接收超时机制来检测连接中断。没有区别。控制接收超时时间的唯一方法是通过
setsockopt()
设置接收超时。内部发送超时可能会导致读取错误,但时间取决于相关发送的超时,而不是输入接收时的超时。考虑一下:你做了一次发送,几分钟后失败,一小时后你做了一次接收。它将立即失败。不是在等待内部发送超时时间之后,该时间已过。相反,如果您在发送后立即进行接收,则在发送超时后将失败。阻塞读取可能会永久阻塞,因为它不会对网络造成任何影响,因此没有任何东西会失败。由于网络问题,您需要已经执行了一次失败的发送,才能解除对读取的阻止。这种所谓的“设计缺陷”实际上是(a)一种设计特征:参见讨论,(b)可通过so_RCVTIMEO进行补救。