gpt4 book ai didi

c++ - 使用与 O_CLOEXEC 相同的 accept4() 设置 SOCK_CLOEXEcflags的目的是什么

转载 作者:IT王子 更新时间:2023-10-29 00:48:19 28 4
gpt4 key购买 nike

基本上,我需要知道在使用 accept4() 时设置 SOCK_CLOEXEC 的目的是什么。我如何使用从 accept 返回的文件描述符检查此标志的功能。

accepted_fd =   accept4(sd, (struct sockaddr *)& tcp_remote, &size,  SOCK_CLOEXEC);

最佳答案

SOCK_CLOEXEC 存在的原因是为了避免在从accept 获取新套接字和之后设置FD_CLOEXEC 标志之间出现竞争条件。

通常,如果您希望文件描述符在执行时关闭,您首先要以某种方式获取文件描述符,然后调用fcntl(fd, F_SETFD, FD_CLOEXEC)。但在线程程序中,获取文件描述符(在本例中来自 accept)和设置 CLOEXEcflags之间可能存在竞争条件。因此,Linux 最近更改了大多数(如果不是全部)返回新文件描述符的系统调用,以也接受标志,告诉内核在使文件描述符有效之前自动设置 close-on-exec 标志。这样竞争条件就关闭了。

如果您想知道为什么存在 close on exec,那是因为在某些情况下,尤其是当您从特权程序执行非特权程序时,您不希望某些文件描述符泄漏给该程序。

关于c++ - 使用与 O_CLOEXEC 相同的 accept4() 设置 SOCK_CLOEXEcflags的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22304631/

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