【发布时间】:2011-05-11 17:21:19
【问题描述】:
SO_RCVTIMEO 选项是否会影响accept(如果超时到期,会导致它返回EAGAIN 或EWOULDBLOCK)?标准是否规定了任何行为?我在 accept 的文档中找不到它或使用选项:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_10_16
【问题讨论】:
-
我似乎记得答案是否定的,但我不记得上下文是否如此或我读过的东西。 Stevens 只提到 read、readv、recv、recvfrom 和 recvmsg 受到影响。似乎 accept 会受到将在某处记录的选项的影响,因为在某些情况下它会很有用。
-
另外,在三路完成之前,连接不会进入待处理队列吗?这将否定这一点,因为您是否要返回一个新的套接字。
-
我在想一个阻塞套接字,当没有连接尝试时
accept花费的时间被阻塞。 -
我知道,但我认为接收超时对接受意味着什么。在应用程序级别没有什么可以接收的,当它们之间可能存在显着延迟时,接收 SYN/ACK 真的意味着什么吗?基于此的计时器似乎不起作用,这就是为什么我认为 SO_RCVTIMEO 在这种情况下不合适的原因。其他一些计时器机制是合适的,即基于队列中没有任何东西/某物的语义而不是读取缓冲区。