github.com/afumu/libc@v0.0.6/musl/src/network/accept4.c (about)

     1  #define _GNU_SOURCE
     2  #include <sys/socket.h>
     3  #include <errno.h>
     4  #include <fcntl.h>
     5  #include "syscall.h"
     6  
     7  int accept4(int fd, struct sockaddr *restrict addr, socklen_t *restrict len, int flg)
     8  {
     9  	if (!flg) return accept(fd, addr, len);
    10  	int ret = socketcall_cp(accept4, fd, addr, len, flg, 0, 0);
    11  	if (ret>=0 || (errno != ENOSYS && errno != EINVAL)) return ret;
    12  	ret = accept(fd, addr, len);
    13  	if (ret<0) return ret;
    14  	if (flg & SOCK_CLOEXEC)
    15  		__syscall(SYS_fcntl, ret, F_SETFD, FD_CLOEXEC);
    16  	if (flg & SOCK_NONBLOCK)
    17  		__syscall(SYS_fcntl, ret, F_SETFL, O_NONBLOCK);
    18  	return ret;
    19  }