用Accept4()设置SOCK_CLOEXEC标志的目的是什么?
what is the purpose to set SOCK_CLOEXEC flag with accept4() same as O_CLOEXEC
基本上,我需要知道在使用Accept4()坐下时设置sock_cloexec的目的是什么。如何使用Accept的返回的文件描述符检查此标志的功能。
accepted_fd = accept4(sd, (struct sockaddr *)& tcp_remote, &size, SOCK_CLOEXEC);
SOCK_CLOEXEC
存在的原因是避免从accept
获取新套接字和之后设置FD_CLOEXEC
标志之间。
通常,如果您希望文件描述符是关闭的EXEC,则首先以某种方式获取文件描述符,然后致电fcntl(fd, F_SETFD, FD_CLOEXEC)
。但是在螺纹程序中,在获取该文件描述符(在这种情况下从accept
)和设置CloExec标志之间有可能有竞赛条件。因此,Linux最近更改了大多数(如果不是全部)调用返回新文件描述符的系统调用,以接受告诉内核在使文件描述符有效之前,请告诉内核原子上设置关闭的EXEC标志。这样,比赛状况被关闭。
如果您想知道为什么要关闭Exec,这是因为在某些情况下,尤其是当您从特权程序执行非特权程序时,您不希望某些文件描述符泄露到该程序。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- C++中名称篡改的目的是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- -Wlifetime 标志的目的是什么?
- 可以在 macOS 上启用的最低支持的 SSE 标志是什么?
- Windows(Visual Studio)中的-fpermssive标志的替代方案是什么
- 什么时候关闭__strict_ansi__标志是不安全的
- 用Accept4()设置SOCK_CLOEXEC标志的目的是什么?
- 在 g++ 中生成 "-L" 和 -rpath 标志的等效函数是什么
- 解码像 FAST 这样的数据协议的快速方法是什么,其中数据以字节为单位编码,并将位作为存在标志
- g++的json精神链接器标志是什么
- 允许共享库中未定义引用的g++标志是什么?
- Boost编译标志,它是什么意思