我看到在系统支持时使用accept4
的nginx源代码。
在Linux 2.6.28之后,我已经在googlet上添加了accept4
支持。
accept4和accept有什么区别?
最佳答案
accept4
是非标准的linux扩展。
真正的区别在于flags
中不存在的第四个参数(accept
):
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int accept4(int sockfd, struct sockaddr *addr,socklen_t *addrlen, int flags);
来自:accept man page
来自:open man page
例如,使用此标志(
SOCK_CLOEXEC
),可以避免多线程程序中的争用条件,在这种情况下,它可能导致open()返回的文件描述符无意间泄漏给fork(2)创建的子进程执行的程序。