我看到在系统支持时使用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)创建的子进程执行的程序。

08-28 01:20