gpt4 book ai didi

linux - pre-fork 服务器套接字调用的正确顺序

转载 作者:太空狗 更新时间:2023-10-29 12:01:27 27 4
gpt4 key购买 nike

如果我这样做会发生什么(下面的伪代码):

s = socket
bind s
fork ....
(... at child ...)
listen s
conn = accept s

?我应该改用:

s = socket 
bind s
listen s
fork ....
conn = accept s

?

哪个是正确的?另外,我是否需要为这个特定场景在套接字上设置任何选项?

最佳答案

Which one is correct [, calling listen() before or after fork()]?

fork() 之前调用 listen() 是正确的。 listen() 的作用是将底层套接字标记为准备好与连接积压的连接。它只需要调用一次。

从代码质量的角度来看,我将另一种方法标记为“不正确”,因为它是多余的且令人困惑。

虽然重复调用 listen() 没有害处,但它很可疑。该规范没有说明进行后续调用时会发生什么,只是说面向连接的套接字应 "maintain a queue of outstanding connection indications" ,即待处理连接的积压。后续调用是否能够更改积压的大小?你想要吗?事实上,并非所有操作系统都允许您查询积压的大小(例如,FreeBSD 有 SO_LISTENQLIMIT)。

关于linux - pre-fork 服务器套接字调用的正确顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com